冇事来学系--Vue2.0中自定义指令

简介: 什么是自定义指令vue官方提供了v-text、v-for、v-if、v-model等指令,此外vue还允许开发者自定义指令

自定义指令


什么是自定义指令

vue官方提供了v-text、v-for、v-if、v-model等指令,此外vue还允许开发者自定义指令

私有自定义指令


directives节点下声明私有自定义指令

<script>
  export default {
    // 私有自定义指令的节点
    directives: {
      // 定义名为color的指令,指向一个配置对象
      color: {
        // 当指令第一次被绑定到元素上的时候,会立即触发bind函数
        // 形参el表示当前指令所绑定的那个DOM对象(element)
        bind(el){
          console.log('触发了v-color的bind函数')
          el.style.color = 'red'  // 将相应DOM对象的文字改为红色
        }
      }
    }
  }
</script>


<!-- 使用自定义指令 -->
<template>
  <h1 v-color>自定义指令color</h1>
  <!-- 触发v-color指令时,会立刻调用里面的bind函数 -->
  <!-- h1内的文字会变成红色 -->
</template>



bind函数的第二个形参binding(官方的写法,写作别的名字如obj也可以)

<template>
  <h1 v-color="color">使用变量指定属性值,由data的数据</h1>
  <h2 v-color=" 'red' "> </h2>
  <!-- 注意不带引号是变量,带引号才是一个表达式的值 -->
</template>
<script>
  export default {
    data(){
      color: blue
    },
    // 私有自定义指令的节点
    directives: {
      // 定义名为color的指令,指向一个配置对象
      color: {
        // 形参el表示当前指令所绑定的那个DOM对象
        bind(el, binding){
          console.log('触发了v-color的bind函数')
          console.log(binding)
          // binding绑定的意思
          // 打印binding得到一个对象,其中的value属性就是使用指令时传递的数据
          el.style.color = binding.value  // 使用 用户指定的颜色
        }
      }
    }
  }
</script>



自定义属性中的update函数

bind函数的缺点:只能在自定义属性第一次绑定到元素上的时候触发一次,当数据改变的时候(DOM更新的时候),不会自动触发bind函数,因而页面也不会重新渲染

update函数会在每次DOM更新时被调用(指令所在的模板被重新解析时)

<script>
  export default {
    directives: {
      // 定义名为color的指令,指向一个配置对象
      color: {
        // 形参el表示当前指令所绑定的那个DOM对象
        bind(el, binding){
          console.log('触发了v-color的bind函数')
          el.style.color = binding.value  
        },
        // 每次DOM更新时被调用
        update(el, binding){
          console.log('触发了v-color的update函数')
          el.style.color = binding.value
        }
      }
    }
  }
</script>


函数简写

上面的bind函数和update函数中的逻辑完全相同,这种情况下 对象格式的自定义指令 可以简写为函数格式

<script>
  export default {
    directives: {
    // 在bind函数和update函数中会触发相同的业务逻辑
     // color: function(el, binding){ }
      color(el, binding){
        el.style.color = binding.value
      }
    }
  }
</script>



补充:

  1. 我们之前写了 自定义指令与元素成功绑定时(一上来)就调用bind函数,每次DOM更新时(指令所在的模板被重新解析时)调用update函数,这都能实现自定义指令的操作。此外,还有一个时间点,就是自定义指令所在的元素被插入到页面的时候,就会调用inserted函数
<script>
  export default {
    directives: {
        color: {
          // 自定义指令与元素成功绑定时(一上来)就调用bind函数
          bind(element,binding){},
          // 自定义指令所在的元素被插入到页面的时候,就会调用inserted函数
          inserted(element,binding){},
          // 每次DOM更新时(指令所在的模板被重新解析时)调用update函数
          update(element,binding){}
        }
    })
  }
</script>
  1. 所有由Vue管理的函数,他们的this都指向的是vm实例对象;而directives节点里面的自定义指令中的函数,他们的this都指向的是window(因为这些函数都是要操作DOM的)

全局自定义指令

全局共享的自定义指令需要通过 Vue.directive( ) 进行声明

注意:全局声明的自定义指令、过滤器等都要写在main.js里面

// 在main.js里面写入
  // 参数1:字符串,表示全局自定义指令的名字
  // 参数2:对象,用来接收指令的参数值
  Vue.directive('color', {
        bind(el, binding){
          console.log('触发了v-color的bind函数')
          el.style.color = binding.value  
        },
        // 每次DOM更新时被调用
        update(el, binding){
          console.log('触发了v-color的update函数')
          el.style.color = binding.value
        }
    }
  // 函数形式简写
  Vue.directive('color', function(el, binding){
    el.style.color = binding.value
  })


目录
相关文章
|
调度 iOS开发 MacOS
【MacOS 系列】mac常用快捷键收集,包含提高开发效率、精选快捷键、内置截图快捷键
【MacOS 系列】mac常用快捷键收集,包含提高开发效率、精选快捷键、内置截图快捷键
624 0
|
安全 Unix Linux
【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章
25000多字详细讲解,深度剖析权限管理核心。从基础权限到复杂的特殊权限,逐一拆解,无论你是零基础小白还是经验丰富的运维人员,都能在这里找到提升技能的关键知识,全面掌握 Linux 权限管理。还不快来看看?
【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章
|
运维 测试技术 开发工具
基于通义灵码 @workspace 和 @terminal 的实践场景、效果和心得
基于通义灵码 @workspace 和 @terminal 的实践场景、效果和心得
|
传感器 监控 安全
预防非法访问
【8月更文挑战第19天】
494 7
|
API 开发者 Python
"FastAPI路由大揭秘!轻松玩转URL映射,让你的Web应用路由设计既RESTful又灵活多变,秒杀传统框架的秘籍在这里!"
【8月更文挑战第31天】在Web开发中,路由是连接用户请求与后端逻辑的关键。FastAPI作为现代Python Web框架的佼佼者,以其简洁的API设计和高性能,提供了高度灵活的路由系统。本文通过开发一个博客系统的案例,详细介绍了FastAPI中路由的实现方法,包括基础路由定义、参数类型验证及路由分组与嵌套等,展示了如何轻松构建RESTful风格的URL映射,提升应用的可维护性和扩展性。
622 2
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】python之人工智能应用篇--跨模态生成技术
跨模态生成技术是一种将不同模态的数据(如文本、图像、音频、视频等)进行融合和转换的技术。其目标是通过将一个模态的数据作为输入,生成与之对应的另一个模态的输出。这种技术对于突破单一模态的局限性,提高信息处理的准确性和丰富性具有重要意义。跨模态生成技术主要依赖于深度学习和生成模型,通过学习和模拟不同模态之间的映射关系来实现模态间的转换。
689 1
|
Java 应用服务中间件 Apache
浅谈Tomcat和其他WEB容器的区别
Tomcat是一款轻量级的免费开源Web应用服务器,常用于中小型系统及并发访问量适中的场景,尤其适合开发和调试JSP程序。它不仅能处理HTML页面,还充当Servlet和JSP容器。相比之下,物理服务器是指具备处理器、硬盘等硬件设施的服务器,如云服务器,其设计目标是在处理能力、稳定性和安全性等方面提供高标准服务。简言之,Tomcat专注于运行Java应用,而物理服务器则提供基础计算资源。
|
存储 编译器 程序员
C语言数据类型详解
C语言数据类型详解
|
安全 物联网 测试技术
构建未来:Android与IoT设备的无缝交互深入探索软件自动化测试的未来趋势
【5月更文挑战第30天】在物联网(IoT)技术快速发展的当下,Android系统因其开放性和广泛的用户基础成为了连接智能设备的首选平台。本文将探讨如何通过现代Android开发技术实现智能手机与IoT设备的高效、稳定连接,并分析其中的挑战和解决方案。我们将深入挖掘Android系统的底层通信机制,提出创新的交互模式,并通过实例演示如何在Android应用中集成IoT控制功能,旨在为开发者提供一套可行的指导方案,促进IoT生态系统的进一步发展。
|
Android开发
Android控件——Checkbox复选框、RadioButton单选、ToggleButton开关、SeekBar拖动条
Android控件——Checkbox复选框、RadioButton单选、ToggleButton开关、SeekBar拖动条
262 0

热门文章

最新文章