Skip to content

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

Open
@haizhilin2013

Description

@haizhilin2013
Collaborator

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

Activity

dongqiang0901

dongqiang0901 commented on Jul 19, 2019

@dongqiang0901
veWangCorn

veWangCorn commented on Sep 19, 2019

@veWangCorn

bind inserted update componentUpdated unbind

AlexZhong22c

AlexZhong22c commented on Sep 19, 2020

@AlexZhong22c

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

这个问题不知道出处。

Cai-zhiji

Cai-zhiji commented on Jul 6, 2023

@Cai-zhiji

自定义指令的写法

在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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @haizhilin2013@dongqiang0901@AlexZhong22c@veWangCorn@Cai-zhiji

        Issue actions

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