vue 自定义指令

autofocus在safari不工作

  • 全局 案例自定义输入框聚焦指令
// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {
  // 当被绑定的元素插入到 DOM 中时……
//inserted 里面的第一个参数就是元素DOM的获取
  inserted: function (el) {
    // 聚焦元素
    el.focus()
  }
})
  • 组件自定义组件
directives: {
  focus: {
    // 指令的定义
    inserted: function (el) {
      el.focus()
    }
  }
}

指令钩子函数

  • bind 之调用一次,指令第一次绑定到元素的时候调用。再这里可以进行一次性的初始化设置
  • inserted 被绑定元素插入父节点时调用(仅保证父节点的存在,但不一定已被插入文档中)
  • updata 所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。
  • componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。
  • unbind:只调用一次,指令与元素解绑时调用。
<div id="hook-arguments-example" v-demo:foo.a.b="message"></div>
Vue.directive('demo', {
  bind: function (el, binding, vnode) {
    var s = JSON.stringify
    el.innerHTML =
      'name: '       + s(binding.name) + '<br>' +
      'value: '      + s(binding.value) + '<br>' +
      'expression: ' + s(binding.expression) + '<br>' +
      'argument: '   + s(binding.arg) + '<br>' +
      'modifiers: '  + s(binding.modifiers) + '<br>' +
      'vnode keys: ' + Object.keys(vnode).join(', ')
  }
})

new Vue({
  el: '#hook-arguments-example',
  data: {
    message: 'hello!'
  }
})

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Vue 自定义指令 全局定义 局部定义 Vue 指令生命周期钩子 bind:只调用一次,指令第一次绑定到元素时调用...
    ChangLau阅读 264评论 0 1
  • >> 阅读官网 当页面加载时,元素将获得焦点 (注意:autofocus 在移动版 Safari 上不工作)。事实...
    竹小星阅读 447评论 2 3
  • Vue.directive (自定义指令) 使用方法,类似v-model等内置指令,2.0的为了提升性能,所以在指...
    梦之卿知阅读 5,605评论 1 1
  • 除了内置的指令外,Vue 也允许注册自定义指令。 vue用Vue.directive(id,definition)...
    G_石头阅读 421评论 0 0
  • 原信:【寄】致浪矢杂货店的一封信 亲爱的栀子白3: 你的来信我已经收到,我想我明白你的烦恼了。这封信里回答...
    聆寻阅读 270评论 3 3