vue自定义指令

在vue中除了默认内置的指令 (v-modelv-show),Vue 也允许注册自定义指令 , 一般用于对dom的底层操作

先定义一个全局的自定义指令 v-color
使用关键词directive定义全局指令
参数一 : 自定义指令的名字
参数二 : 一个大对象

Vue.directive("color",{})

每个自定义指令都有自己的钩子函数 (共有 5 个 , 均为可选)
bind:只调用一次,指令第一次绑定到元素时调用。
inserted:被绑定元素插入父节点时调用(仅保证父节点存在,但不一定已被插入文档中)。
update:所在组件的 虚拟节点 更新时调用
componentUpdated:指令所在组件的 虚拟节点 及其子 节点 全部更新后调用
unbind:只调用一次,指令与元素解绑时调用

Vue.directive("color",{
  bind(){
    console.log("bind")
  },
  // 每一个钩子函数都有这三个参数 , update 和 componentUpdated 还有第四个参数
  // 参数一 : 当前绑定的元素节点
  // 参数二 : 可以获取到自定义指令传递的参数
  inserted(el,binding,vnode){  
    console.log("inserted",binding,vnode)
    // 设置绑定元素的color
    el.style.color = binding.value.color  
    // 设置绑定元素的font-size
    el.style.fontSize = binding.value.fontSize + 'px' 
  },
  // 点击更新按钮会触发更新阶段的钩子
  update(el,binding,vnode,oldVnode){
    console.log("update",vnode,oldVnode)
    el.style.color = binding.value.color
    el.style.fontSize = binding.value.fontSize + 'px'
  },
  componentUpdated(){
    console.log("componentUpdated")
  },
  unbind(){
    console.log("unbind")
  }
})

在vue实例中使用一下v-color这个自定义指令

<div id="app">
  <!-- 使用 v-color 指令 , 并传递一个参数 style 
  这里 style 是 data 中的对象 , 而不是一个简单的 String -->
  <p v-color="style">文字文件自</p>
  <button @click="handleClick">更新</button>
</div>
<script src="./vue.js"></script>
<script>
  new Vue({
    el:"#app",
    data:{
      style:{
        color:"red",
        fontSize:30
      }
    },
    methods:{
    // 点击按钮修改data 会触发更 update 和 componentUpdated
      handleClick(){
        this.style = {
          color:"yellow",
          fontSize:80
        }
      }
    }
  })
</script>
  • 效果
  1. 点击更新前 :
    点击更新前
  2. 点击更新后 :
    在这里插入图片描述

定义某一个指令 , 实现某一个功能
如果想注册局部指令,组件中也接受一个 directives 的选项 , 在这里就不介绍了, 个人感觉还是全局自定义指令比较实用 , 哪一个组件都可以用到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值