• 实例/组件用于数据绑定、事件监听、DOM 更新(通过监听器更新)
  • 指令主要用于原生 DOM 操作
  • 作用为减少 DOM 重复操作:当某个 DOM 操作经常用或操作复杂,则可封装为指令
  • 全局用 Vue.directive(‘x’, {…}),局部用 options.directives

注册全局指令 Vue.directive

可以在任何组件使用 v-x

  1. // 注册
  2. Vue.directive('v-x', {
  3. // directiveOptions
  4. bind: function () {},
  5. inserted: function () {},
  6. update: function () {},
  7. componentUpdated: function () {},
  8. unbind: function () {}
  9. })
  10. // 注册 (指令函数)
  11. Vue.directive('my-directive', function () {
  12. // 这里将会被 `bind` 和 `update` 调用
  13. })
  14. // getter,返回已注册的指令
  15. var v-x = Vue.directive('v-x')

声明局部指令

只能在该实例中使用 v-x

  1. new Vue({
  2. directives: {
  3. "x": {
  4. bind: function () {},
  5. inserted: function () {},
  6. update: function () {},
  7. componentUpdated: function () {},
  8. unbind: function () {}
  9. }
  10. }
  11. })

directiveOptions

查看文档

  • bind(el, info, vnode, oldVnode):类似 created
  • inserted(el, info, vnode, oldVnode):类似 mounted
  • update(el, info, vnode, oldVnode):类似 updated
  • componentUpdated(el, info, vnode, oldVnode): 用得少
  • unbind(el, info, vnode, oldVnode):类似 destroyed

    手写 v-on

    ```vue

``` 当点击 button 时,inserted(el, info) 中打印的 info 如下:
v-x.png