vue自定义组件

142 阅读1分钟

指令的分类

  • 私有自定义指令
  • 全局自定义指令

私有自定义组件

在每个vue组件中,directives节点下声明私有自定义指令

// v- 是固定写法
<p v-color="color">9999</p>
<p v-color="'red'">测试<p>
export default {
  data() {
    return {
      color: "blue",
    };
  },
  // 自定义指令的节点
  directives: {
    // 定义一个color的指令,指向一个配置对象
    color: {
      // 当指令第一次绑定到DOM元素上时,会立即触发bind函数
      // 形参中的el表示当前指令所绑定的DOM对象
     bind(el, binding) {
        console.log("触发了bind函数", el, binding);
        el.style.color = binding.value;
      },
    },
  },
};

指令简写

bind函数只调用一次:当指令第一次绑定到元素时调用,当DOM跟新时bind函数不会被触发

update函数会在每次DOM更新时被调用

  // 自定义指令的节点
  directives: {
    // 定义一个color的指令,指向一个配置对象
    color: {
      // 当指令第一次绑定到DOM元素上时,会立即触发bind函数
      // 形参中的el表示当前指令所绑定的DOM对象
      bind(el, binding) {
        console.log("触发了bind函数", el, binding);
        el.style.color = binding.value;
      },
      update(el, binding) {
        console.log("触发了update函数", el, binding);
        el.style.color = binding.value;
      }
    }
  }

bindupdate函数中的逻辑完全相同,则对象格式的自定义指令可简写成函数格式

// 自定义指令的节点
directives: {
    // 定义一个color的指令,指向一个配置对象
    color(el, binding) {
      console.log(el, binding);
      el.style.color = binding.value;
    }
}

全局自定义指令

全局共享的自定义指令需要通过Vue.directive()进行声明

// --main.js

// 定义
// 参数1:字符串 表示全局自定义指令的名字
// 参数2:对象,用来接收指令的参数值
Vue.directive('color', (el, binding) => {
  el.style.color = binding.value
})

// 使用
<p v-color="color">9999</p>
<p v-color="'red'">测试<p>