美文网首页
自定义指令

自定义指令

作者: 冰点雨 | 来源:发表于2022-03-21 09:03 被阅读0次

    需求1:定义一个v-big指令。和v-text功能类似,但会把绑定的数值放大10倍

    需求2:定义一个v-fbind知道。和v-bind功能类型,但可以让其绑定的input元素默认获取焦点

    定义指令总结:

      一、定义语法:
        (1)局部指令:
            new Vue({
                directives:{指令名,配置对象}
            })
            或
            new Vue({
                directives(){}
            })
         (2)全局指令:
             Vue.directive(指令,配置对象) 或 Vue.directive(指令名,回调函数)
      
      二、配置对象中常用的3个回调:
          (1)bind:指令与元素成功绑定时调用
          (2)inserted:指令所在元素被插入页面时调用
          (3)update:指令所在模板结构被重新解析时调用
      
      三、备注
          1.指令定义式不加v-,但使用时要加v-:
          2.指令名如果是多个单词,要使用kebab-case命名方式,不要用camelCase命名
    
    <body>
      <div id="root">
        <h2>当前的n值为:<span v-text="n"></span></h2>
        <h2>当前放大10倍后的n值为:<span v-big="n"></span></h2>
        <button @click="n++">点我n+1</button>
        <hr/>
        <input type="text" v-fbind:value="n">
      </div>
    
      <script type="text/javascript">
        Vue.config.productionTip = false
        //定义全局指令
    /*     
        Vue.directive('fbind',{
          //指令与元素成功绑定时(一上来)
          bind(element, binding) {
            element.value = binding.value
          },
          //指令所在元素被插入页面时
          inserted(element, binding) {
            element.focus()
          },
          //指令所在的模板被重新解析时
          update(element, binding) {
            element.value = binding.value
            element.focus()
          },
        }) */
    
       /*  Vue.directive('big',function(element, binding){
          element.innerText = binding.value * 10
        }) */
    
        const vm = new Vue({
          el: "#root",
          data: {
            n: 1
          },
          directives:{
            //big何时会被调用?1.指令与元素成功绑定时(一上来)2.指令所在的模板被重新解析时
            // 'big-number'(element, binding) {
            big(element,binding){
              console.log('big',this)//注意:此处的this是window
              element.innerText = binding.value * 10
            },
            'fbind': {
            fbind:{
              //指令与元素成功绑定时(一上来)
              bind(element, binding){
                element.value = binding.value
              },
              //指令所在元素被插入页面时
              inserted(element, binding){
                element.focus()
              },
              //指令所在的模板被重新解析时
              update(element, binding) {
                element.value = binding.value
                element.focus()
              },
            }
          }
        })
      </script>
    </body>
    

    相关文章

      网友评论

          本文标题:自定义指令

          本文链接:https://www.haomeiwen.com/subject/qzptdrtx.html