Vue中如何自定义函数指令

Vue中如何自定义函数指令:有两种方式,局部注册和全局注册

一. 局部注册:

 new Vue({
    el: '#root',
    data: {
      n: 1
    },

    // 局部的指令
    // 自定义指令
    // 注意:指令里面的 this 都是 window
    directives: {
      //注意定义的是 big,使用的是 v-big
      // big函数何时会被调用: 1 指令与元素成功绑定时(一上来) 
      //                    2 指令所在的模版被重新解析的时候(意思是:该模版上面任何的元素发生变化,都要重新调用v-big指令)
      // 有两个参数,element 是v-big指令所在的真实DOM元素,binding 是element和n绑定的所有全部信息
      'big-number'(element, binding) {
        element.innerText = binding.value * 10;
        // console.log(element,binding)
      },

      //  所以其实指令语法的功能:就是操作 DOM元素的标签属性,标签体内容,绑定事件等

      fbind: {
        // 当指令与元素成功绑定时调用
        bind(element, binding) {
          element.value = binding.value;
        },
        //指令所在元素时被插入页面时调用
        inserted(element, binding) {
          element.focus();
        },
        //指令所在的模版被重新解析时被调用
        update(element, binding) {
          element.value = binding.value;
        }
      }

    }
  })

二. 全局注册:

  // 全局的指令式命令
  Vue.directive('fbind2', {
    // 当指令与元素成功绑定时调用
    bind(element, binding) {
      element.value = binding.value;
    },
    //指令所在元素时被插入页面时调用
    inserted(element, binding) {
      element.focus();
    },
    //指令所在的模版被重新解析时被调用
    update(element, binding) {
      element.value = binding.value;
    }
  })

三. 注意点:很重要
在这里插入图片描述

四. 下面是具体的实例,根据需求自定义一个函数指令:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<!--
  需求1:定义一个 v-big 指令,和 v-text 功能类似,但会把绑定的数值放大10倍
  需求2:定义一个 v-fbind 指令,和 v-bind 功能相似,但可以让其所绑定的input元素默认获取焦点
-->
<div id="root">
  <h2>当前的值是:<span v-text="n"></span></h2>
  <h2>放大10倍后的n值是:<span v-big-number="n"></span></h2>
  <button @click="n++">n++</button>

  <hr>
  <input type="text" v-fbind:value="n">

</div>

<script src="./vue.js"></script>
<script>

  // 全局的指令式命令
  Vue.directive('fbind2', {
    // 当指令与元素成功绑定时调用
    bind(element, binding) {
      element.value = binding.value;
    },
    //指令所在元素时被插入页面时调用
    inserted(element, binding) {
      element.focus();
    },
    //指令所在的模版被重新解析时被调用
    update(element, binding) {
      element.value = binding.value;
    }
  })

  new Vue({
    el: '#root',
    data: {
      n: 1
    },

    // 局部的指令
    // 自定义指令
    // 注意:指令里面的 this 都是 window
    directives: {
      //注意定义的是 big,使用的是 v-big
      // big函数何时会被调用: 1 指令与元素成功绑定时(一上来)
      //                    2 指令所在的模版被重新解析的时候(意思是:该模版上面任何的元素发生变化,都要重新调用v-big指令)
      // 有两个参数,element 是v-big指令所在的真实DOM元素,binding 是element和n绑定的所有全部信息
      'big-number'(element, binding) {
        element.innerText = binding.value * 10;
        // console.log(element,binding)
      },

      //  所以其实指令语法的功能:就是操作 DOM元素的标签属性,标签体内容,绑定事件等


      fbind: {
        // 当指令与元素成功绑定时调用
        bind(element, binding) {
          element.value = binding.value;
        },
        //指令所在元素时被插入页面时调用
        inserted(element, binding) {
          element.focus();
        },
        //指令所在的模版被重新解析时被调用
        update(element, binding) {
          element.value = binding.value;
        }
      }

    }
  })

</script>
</body>
</html>

五. 若还有不清楚的,可以查看官网对应说明,链接如下:

此处点击跳转到Vue官网有关自定义指令的描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值