Directives

官方文档

写法

声明一个全局指令

Vue.directive('x',directiveOptions)

示例代码:

  1. Vue.directive("x", {
  2. inserted: function (el) {
  3. el.addEventListener("click", () => {
  4. console.log("x");
  5. });
  6. }
  7. });

然后借可以在其他地方使用 v-x

  1. <img alt="Vue logo" v-x src="./assets/logo.png" width="25%">

声明一个局部的

在相应的组件里面写入,然后只能在当前组件里面引用。

  1. <script>
  2. export default {
  3. name: "HelloWorld",
  4. directives: {
  5. x: {
  6. inserted(el) {
  7. el.addEventListener("click", () => {
  8. console.log("x");
  9. });
  10. },
  11. },
  12. },
  13. props: {
  14. msg: String,
  15. },
  16. };
  17. </script>

一个指令定义对象可以提供如下几个钩子函数 (均为可选):

  • bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。

  • inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。

  • update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。

  • componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。

  • unbind:只调用一次,指令与元素解绑时调用。

接下来我们来看一下钩子函数的参数 (即 el、binding、vnode 和 oldVnode)。

小贴士:当我们写bind/inserted/update等,往往再加一个unbind 来解绑。

指令的作用

主要用于DOM操作

  • Vue实例/组件用于数据绑定、事件监听、DOM更新
  • Vue指令主要目的就是原生DOM操作

减少重复

  • 如果某个DOM操作你经常使用,就可以封装为指令
  • 如果某个DOM操作比较复杂,也可以封装为指令

mixins(混入)

官方文档

mixins的作用是减少data、 methods、 钩子的重复

代码示例:点击这里

extends(继承)

减少重复

和上面的minxins是一样的,它可能将Vue.vue也会认为是一个需要继承的文件。

最好就是多用minins,如果在一模块里面使用了太多的minins就可以考虑extends一次复制和继承。

案例示例:点击这里

provide(提供) 和 inject(注入)

祖先提供后代使用。

  1. // 祖先提供
  2. provide() {
  3. return {
  4. themeName: this.themeName,
  5. fontSizeNmae: this.fontSizeName,
  6. changeTheme: this.changeTheme, // 如果不生效,刷新一下 codesandbox
  7. changeFontSize: this.changeFontSize
  8. };
  9. }
  1. // 后代注入
  2. <script>
  3. export default {
  4. inject: ["themeName", "changeTheme", "changeFontSize"]
  5. };
  6. </script>

案例示例:点击这里