Vue2中使用自定义指令

在vue中,除了vue提供了一套内置的指令外,Vue 也允许注册自定义指令,用来配置重写某一项数据的方法,声明自定义指令,分为全局注册自定义指令,以及局部注册自定义指令。全局注册,为 Vue.directive()接收两个参数,第一个参数为字符串是我们需要注册的指令名称,,第二个参数为一个对象,对象中接收多个回调钩子函数
在这里插入图片描述
并且每个函数钩子都会接收多个参数,可以拿到DOM节点,也能够拿到,绑定的value数据;

局部注册与全局注册的区别就是,在某一个vue实例身上定义一个 directives 的对象,然后在 directives 中,配置所需要的自定义指令。
在这里插入图片描述

  <div id="root">
    <h2>默认数据:{{switchs}}</h2>    
    <h2 v-Capital="switchs">自定义指令转换为大写:</h2>   
    <h2 v-Small="switchs">自定义指令转换为小写:</h2>   
  </div>

  <body>
    <script>
    //全局自定义指令
      Vue.directive("Capital", {  //初始化自定义指令 Capital,将绑定数据加工成大写。
        inserted(el) {
          //被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)
          console.log(el);
        },
        bind(el, binding, vnode, oldVnode) {
          //只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
          console.log(el, binding, vnode, oldVnode);
          el.innerText += binding.value.toUpperCase();
        },
        update(el, binding, vnode, oldVnode) {
          console.log(el, binding, vnode, oldVnode);
        },
      });
        //全局自定义指令
      Vue.directive("Small", {    //初始化自定义指令 Small 将绑定数据加工成小写。
        inserted(el) {
          //被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)
          console.log(el);
        },
        bind(el, binding, vnode, oldVnode) {
          //只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
          console.log(el, binding, vnode, oldVnode);
          el.innerText += binding.value.toLowerCase();
        },
        update(el, binding, vnode, oldVnode) {
          console.log(el, binding, vnode, oldVnode);
        },
      });

      const vm = new Vue({
        // el: "#root",
        data() {
          return {
            switchs: "asdawATYUTYRYfbhaj",   //初始值字符串包含大小写字母混合
          };
        },
         directives: {    //局部自定义组件
          Capital: {
            inserted(el) {
              //被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)
              console.log(el);
            },
            bind(el, binding, vnode, oldVnode) {
              //只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
              console.log(el, binding, vnode, oldVnode);
              el.innerText += binding.value.toUpperCase();
            },
            update(el, binding, vnode, oldVnode) {
              console.log(el, binding, vnode, oldVnode);
            },
          },
          Small: {
            inserted(el) {
              //被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)
              console.log(el);
            },
            bind(el, binding, vnode, oldVnode) {
              //只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
              console.log(el, binding, vnode, oldVnode);
              el.innerText += binding.value.toLowerCase();
            },
            update(el, binding, vnode, oldVnode) {
              console.log(el, binding, vnode, oldVnode);
            },
          },
        },
      });
      vm.$mount("#root");
    </script>
  </body>
</html>

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旧梦星轨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值