首页 > 其他分享 >Vue学习笔记32--自定义指令--对象式

Vue学习笔记32--自定义指令--对象式

时间:2024-03-05 15:01:42浏览次数:23  
标签:Vue 自定义 -- binding value element 指令

Vue学习笔记32--自定义指令--对象式

 总结:
    1.autofocus属性,用于input自动获取焦点
    2.directives指令中 this 是指 window 
    3.vm 中使用directives进行自定义指令,为局部指令
    4.全局指令和全局过滤器类似,应在vm之外使用 directive进行声明使用

自定义指令总结:

  1.  定义语法
    • 局部指令:
      • 对象式:new Vue({directives:{指令名称:配置对象}})
      • 函数式:new Vue({directives(){}})
    • 全局指令:
      • Vue.directive(指令名,配置对象)        
      • Vue.directive(指令名,回调函数)
  1. 配置对象中常用的3个回调
    • bind (element, binding){}--指令与元素成功绑定时(一上来)
    • inserted (element, binding) {}--指令所在元素被插入页面时
    • update (element, binding) {}--指令所在的模版被重新解析时
  2. 备注
    • 指令定义时不加v-,但使用时要加v-
    • 指令名如果是多个单词,要使用kebdb-case命名方式(或全小写),不要用camelCase命名——
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>自定义指令--对象式</title>
  <!-- js阻塞 -->
  <script type="text/javascript" src="../Js/vue.js"></script>
</head>

<body>
  <div id="root">
    <h3>
      自定义指令:<br>
      需求一:定义一个v-big指令,和v-text功能类似,但会把将绑定的数值放大10倍<br>
      需求二:定义个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点<br>
    </h3>
    <hr>
    总结:<br>
    1.autofocus属性,用于input自动获取焦点<br>
    2.directives指令中 this 是指 window <br>
    3.vm 中使用directives进行自定义指令,为局部指令<br>
    4.全局指令和全局过滤器类似,应在vm之外使用 directive进行声明使用
    <hr>
    <h3>{{name}}</h3>
    <h3>当前的n值是:<span v-text="n"> </h3>
    <h3>放大10倍n值是:<span v-big-number="n"> </h3>
    <button @click="n++">n++</button>
    <hr>
    v-bind:<input type="text" v-bind:value="n"><br><br>
    <!-- v-fbind:<input type="text" v-fbind:value="n" autofocus> -->
    <!-- v-fbind:<input type="text" v-fbind:value="n"> 方法式 <br><br> -->

    <!-- v-fbind:<input type="text" v-fbindobj:value="n"> 局部对象式 <br><br> -->

    v-fbind:<input type="text" v-fbindobjall:value="n"> 局部对象式 <br><br>

    v-fbindobjall:<input type="text" v-fbindobjall:value="n"> 全局对象式 ,可以访问<br><br>
  </div>
  <hr>
  <div id="root2">
    v-fbindobjall:<input type="text" v-fbindobjall:value="x"> 全局对象式 可以访问 <br><br>
    <!-- v-fbind:<input type="text" v-fbind:value="n"> 局部对象式,无法访问 <br><br> -->
  </div>
</body>

</html>
<script type="text/javascript">
  Vue.config.productionTip = false
  // --------------全局自定义指令开始--------------
  Vue.directive('fbindobjall', {
    // 指令与元素成功绑定时(一上来)
    bind (element, binding) {
      console.log('bind fbindobjall')
      element.value = binding.value
    },
    // 指令所在元素被插入页面时
    inserted (element, binding) {
      console.log('inserted fbindobjall')
      element.focus()
    },
    // 指令所在的模版被重新解析时
    update (element, binding) {
      console.log('update fbindobjall')
      element.value = binding.value
      // element.focus()
    }
  })
  // --------------全局自定义指令结束--------------

  //console.log(vm)
  Vue.config.productionTip = false
  const vm2 = new Vue({
    el: '#root2',
    data: {
      name: 'v-text 学习笔记',
      x: 1,
    },


  })
  const vm = new Vue({
    el: '#root',
    data: {
      name: 'v-text 学习笔记',
      n: 1,
    },
    //--------------局部自定义指令--------------
    directives: {
      // ---------------函数式写法---------------
      // big函数何时被调用==》
      // 1.指令与元素成功绑定时被调用 
      // 2.指令所在的模版被重新解析时,被调用
      'big-number' (element, binding) {
        element.innerText = binding.value * 10
        console.log('element', binding.value)
        // 指令中 this 是指 window
        console.log('element', this)
      },
      //方法式,使用element.focus 默认不会获取焦点
      fbind (element, binding) {
        element.value = binding.value
        element.focus()
      },
      // ---------------函数式写法---------------

      // ---------------对象式 自定义指令---------------
      /* fbindobj:
      {
        // 指令与元素成功绑定时(一上来)
        bind (element, binding) {
          console.log('bind')
          element.value = binding.value
        },
        // 指令所在元素被插入页面时
        inserted (element, binding) {
          console.log('inserted')
          element.focus()
        },
        // 指令所在的模版被重新解析时
        update (element, binding) {
          console.log('update')
          element.value = binding.value
          // element.focus()
        }
      }*/
      // ---------------对象式 自定义指令---------------
    }


  })

</script>

 

标签:Vue,自定义,--,binding,value,element,指令
From: https://www.cnblogs.com/YYkun/p/18047235

相关文章

  • fiddler绑定mumu模拟器安装证书配置抓包使用
    1、在mumu模拟器的浏览器上,访问代理机器的ip加上8888回车,点击下载证书 2、找到mumu模拟器里的设置,找到证书,进行安装  3、证书安装完成之后,找到连接的wifi,点击配置代理为手动 4、以上配置完成就可以抓包成功啦 ......
  • 自我介绍+软工五问
    作业要求|这个作业属于哪个课程|https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024>||-----------------|---------------||这个作业要求在哪里|https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024/homework/13135||这个作业的目标|初步......
  • BeanShell PostProcessor 后置处理器1
    一概念:作用类似于后置处理器,其中的ctx、vars、props、prev、log都和BeanShellSampler一样一样![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/fyfile/16194/1663307082040/f1a46708c4ae40229e892abaf6985a72.png)重点解释前面没有的:**data:......
  • 使用Npoi简单生成Excel并赋值导出小案例
    publicasyncTask<byte[]>ExportNewReportByQuotationId(GuidquotationId){IWorkbookwookbook=newXSSFWorkbook();//EngineerQuoteSheetawaitDoEngineerQuoteWork(wookbook,quotationId);//ILSheetawa......
  • linux下的java部署
    jar命令简介java部署jar包可以使用java-jar命令,比如:java-jardemo.jar执行上述命令后,JAR包中的程序将在Linux系统中运行。注:在运行JAR包之前,确保你的JAR文件是可执行的,并且包含了正确的类和依赖项。如果JAR包依赖于其他库或配置文件,确保它们也在正确的位置可用。......
  • 3562-Linux系统使用手册
      ......
  • (19)Lazarus学习之TreeFilterEdit1过滤TreeView1数据
    与(18)Lazarus学习ListViewFilterEdit1过滤ListView1数据 类似1]界面上添加一个TreeView1,双击添加好树结点 2]拖一个TreeFilterEdit1到界面上,设置它的FilteredTreeview 可以设置是不是大小写敏感   最好设置它的Text为空,这样一开始就可以看到所有树结点 pro......
  • 腾讯视频号直播学习第一课-用户画像
    1核心下单用户40-65岁人群30-40岁用户每个月正在快速增长7成以上下单用户为女性整体复购率和加粉率高目前复购率最高可达80%下单用户一线城市30%,一线二线是转化重点与其他电商,短视频平台下单用户重回率低于30%2货品特征消费品大盘平均价为200,正常商品退货率低于10%、9......
  • leetcode--1976. 到达目的地的方案数(最短路)
    记录12:052024-3-5https://leetcode.cn/problems/number-of-ways-to-arrive-at-destination/通过最短路找到从源点到目标点距离,在更新的过程中,对某个点记录下可以达到最短距离的父亲节点,然后从目标点往回dp就可以了(有种逆向拓扑排序的感觉)当然这是不必要的,在更新最短距离的......
  • spfa优化
    1.SLF优化在我们学SPFA的时候,要把每一个入队的点插入到队尾,可是有些时候这个点作为队尾没有作为队头效率高,因为这个点有时放在队首就能直接用,那么什么样的点作为队首更好呢?当然是dis值越小越可能刷新其它\(dis\)值,所以对比当前元素与对首元素的\(dis\)值,如果当前元素的\(dis......