Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[vue] 你有写过自定义指令吗?自定义指令的生命周期(钩子函数)有哪些? #234

Open
haizhilin2013 opened this issue Jun 11, 2019 · 4 comments
Labels
vue vue

Comments

@haizhilin2013
Copy link
Collaborator

[vue] 你有写过自定义指令吗?自定义指令的生命周期(钩子函数)有哪些?

@haizhilin2013 haizhilin2013 added the vue vue label Jun 11, 2019
@dongqiang0901
Copy link

v-focus;
自定义指令的钩子函数

@veWangCorn
Copy link

bind inserted update componentUpdated unbind

@AlexZhong22c
Copy link

这个问题像是个引子。接下来往下问什么才是重点吧?

这个问题不知道出处。

@Cai-zhiji
Copy link

自定义指令的写法

在Vue中,可以通过Vue.directive方法来创建自定义指令。自定义指令可以用于扩展Vue的功能,实现特定的DOM操作或交互行为。

// 在Vue实例中定义自定义指令
Vue.directive('my-directive', {
  // 指令生命周期钩子
  bind(el, binding, vnode) {
    // 在指令绑定到元素时调用,只调用一次
    // el:指令所绑定的元素
    // binding:指令的绑定信息,包括值、修饰符等
    // vnode:Vue编译生成的虚拟节点

    // 指令绑定时的初始化操作
    el.textContent = 'Initialized!';
  },

  inserted(el, binding, vnode) {
    // 在被绑定元素插入到父节点时调用
    // 只保证父节点存在,但不一定已经插入到文档中

    // 执行插入后的操作
    el.textContent = 'Inserted!';
  },

  update(el, binding, vnode, oldVnode) {
    // 在组件更新时调用,可能会触发多次

    // 执行更新操作
    el.textContent = 'Updated!';
  },

  componentUpdated(el, binding, vnode, oldVnode) {
    // 在组件及其子组件更新完成后调用

    // 执行更新完成后的操作
    el.textContent = 'Component Updated!';
  },

  unbind(el, binding, vnode) {
    // 在指令从元素上解绑时调用

    // 执行解绑操作
    el.textContent = 'Unbind!';
  }
});

自定义指令的生命周期钩子

bind:在指令绑定到元素时调用,只调用一次。
inserted:在被绑定元素插入到父节点时调用。
update:在组件更新时调用,可能会触发多次。
componentUpdated:在组件及其子组件更新完成后调用。
unbind:在指令从元素上解绑时调用。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
vue vue
Projects
None yet
Development

No branches or pull requests

5 participants