第九十二篇:Vue 自定义指令
好家伙,
1.什么是自定义指令?
vue官方提供了v-text,v-for,v-model,v-if等常用的指令。除此之外vue还允许开发者自定义指令。
2.自定义指令的分类
vue中的自定义指令分为两类,分别是:
~私有自定义指令
~全局自定义指令
3,私有自定义指令
在每个vue组件中,可以再directives节点下声明私有自定义指令,示例代码如下:
需求来了:
非常简单,我要去改h1标签的颜色,怎么改?
3.1.我们来试着自定义一个自定义指令:
在App.vue组件中:
<h1 v-color>App根组件</h1>
对v-color指令进行配置:
//私有自定义指令的节点
directives:{
//定义一个名字为color的的指令,指向一个配置对象
color:{}
},
这里我们会用到bind函数
directives:{
//定义一个名字为color的的指令,指向一个配置对象
color:{
//当当指令第一次被绑定到元素上的时候,会立即触发bind函数
//形参中的el表示当前指令所绑定到的那个DOM对象
bind:function(el){
console.log('我被触发了')
el.style.color='red'
}
}
},
于是我们一进页面就可以看到一个红色的h1

3.2.我们还有另外的写法:
<h1 v-color="color">App根组件2</h1>
来进行配置:
data(){
return{
comName:'Left',
color:'blue'
}
},
directives:{
color:{
//el拿到,
bind:function(el,binding){
console.log('我被触发了')
console.log(binding)
el.style.color = binding.value
}
}
},
来看看看binding里面的是些啥

所以binding拿到的是color
所以我们可以通过:
el.style.color = binding.value
去改h1的颜色
3.3.两者的不同之处
<h1 v-color="color">App根组件</h1>
<h1 v-color="'red'">App根组件2</h1>
去浏览器里面看看binding里的是啥
可以看到'red'只是一个表达式
4.update函数:
bind函数只调用一次:
单指令第一次绑定到元素时调用,当DOM更新是bind函数不会触发.
update函数会在每次DOM更新时被调用.
我们又又又来尝试一下:
来实现一个按钮点击改颜色
例子如下:
<template>
<div>
<h1 v-color>App根组件</h1>
<h1 v-color="color">App根组件2</h1>
<h1 v-color="'red'">App根组件3</h1>
<button @click="color='green'">改变颜色</button> </div>
</template> <script>
//1.导入需要的组件
import Left from './components/Left.vue'
import Right from './components/Right.vue'
import Article from './components/Article.vue' export default {
data(){
return{
comName:'Left',
color:'blue'
}
},
//私有自定义指令的节点
directives:{
//定义一个名字为color的的指令,指向一个配置对象
color:{
//当当指令第一次被绑定到元素上的时候,会立即触发bind函数
//形参中的el表示当前指令所绑定到的那个DOM对象
bind:function(el,binding){
console.log('被触发了bind函数')
console.log(binding)
el.style.color = binding.value
},
//在DOM更新的时候,会触发update函数
update(el,binding){
console.log('被触发了update函数')
console.log(binding)
el.style.color = binding.value }
}
}, }
</script>

嗯,搞定
5.简写
如果bind和update函数中的逻辑完全相同,则对象格式的自定义指令可以简写成函数形式:
directives:{
//定义一个名字为color的的指令,指向一个配置对象
// color:{
// //当当指令第一次被绑定到元素上的时候,会立即触发bind函数
// //形参中的el表示当前指令所绑定到的那个DOM对象
// bind:function(el,binding){
// console.log('被触发了bind函数')
// console.log(binding)
// el.style.color = binding.value
// },
// //在DOM更新的时候,会触发update函数
// update(el,binding){
// console.log('被触发了update函数')
// console.log(binding)
// el.style.color = binding.value
// }
// }
color(el,binding){
el.style.color = binding.value
}
},
下方为缩写(妙啊)
6.注册全局自定义指令
Vue.directive('color',function(el,binding){
el.style.color = binding.value
})
搞定
That's all
第九十二篇:Vue 自定义指令的更多相关文章
- Django学习笔记第十二篇--关于自定义数据库字段数据类型
一.需求背景: django的models模块提供了很多数据字段的数据类型field,但是总有写奇葩需求不能依靠默认字段满足,所以需要自定义数据数据库数据字段类型.所有的自定义field应该在app路 ...
- 第四十二篇、自定义Log打印
1.在Xcode 8出来之后,需要我们去关闭多余的日志信息打印 2.在开发的过程中,打印调试日志是一项比不可少的工程,但是在iOS 10中NSLog打印日志被屏蔽了,就不得不使用自定义Log 3.去掉 ...
- 第三十二篇:vue的响应式原理
好家伙 什么是响应式?比较官方的回答: Vue.js 的核心包括一套"响应式系统". "响应式",是指当数据改变后,Vue 会通知到使用该数据的代码. 例如,视 ...
- 第十二篇 Integration Services:高级日志记录
本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...
- 【译】第十二篇 Integration Services:高级日志记录
本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...
- 跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探
SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如 ...
- Vue自定义指令使用场景
当你第一次接触vue的时候,一定会使用到其中的几个指令,比如:v-if.v-for.v-bind...这些都是vue为我们写好的,用起来相当的爽.如果有些场景不满足,需要我们自己去自定义,那要怎么办呢 ...
- Vue | 自定义指令和动态路由实现权限控制
功能概述: 根据后端返回接口,实现路由动态显示 实现按钮(HTML元素)级别权限控制 涉及知识点: 路由守卫 Vuex使用 Vue自定义指令 导航守卫 前端工程采用Github开源项目Vue-elem ...
- Python开发【第二十二篇】:Web框架之Django【进阶】
Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...
随机推荐
- Redis之Lua的应用(四)
一.什么是Lua脚本 Lua是一个高效的轻量级脚本语言(和JavaScript类似),用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能.Lu ...
- 全新升级的AOP框架Dora.Interception[2]: 基于“约定”的拦截器定义方式
Dora.Interception有别于其他AOP框架的最大的一个特点就是采用针对"约定"的拦截器定义方式.如果我们为拦截器定义了一个接口或者基类,那么拦截方法将失去任意注册依赖服 ...
- 用Typescript 的方式封装Vue3的表单绑定,支持防抖等功能。
Vue3 的父子组件传值.绑定表单数据.UI库的二次封装.防抖等,想来大家都很熟悉了,本篇介绍一种使用 Typescript 的方式进行统一的封装的方法. 基础使用方法 Vue3对于表单的绑定提供了一 ...
- 图片放在div中低下会出现一条缝
页面要达到的样子 中间写的是时候是向div里面放一张图片就行了 <head> <link rel="stylesheet" href="reset.cs ...
- 隐私计算FATE-多分类神经网络算法测试
一.说明 本文分享基于 Fate 使用 横向联邦 神经网络算法 对 多分类 的数据进行 模型训练,并使用该模型对数据进行 多分类预测. 二分类算法:是指待预测的 label 标签的取值只有两种:直白来 ...
- spring-security 配置简介
1.Spring Security 简介 Spring Security 是一个能够基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在 Spring 应用 ...
- Deep Learning-深度学习(一)
深度学习入门 1.人工智能.机器学习.深度学习 1.1 人工智能(AI) 一个比较宽泛的概念.即用来模拟人的智能的理论,并对这个模拟出来的智能进行延伸和开拓.通俗来讲就是要达到用机器模拟人类的聪慧来处 ...
- 一款 IDEA 插件帮你优雅转化 DTO、VO、BO、PO、DO
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.承认你优秀很难 很多码农,把路走窄了 捧一个,喷一个,很多码农都不会多一点思路看问题,总是 ...
- war包解压与压缩
解压:jar -xvf ROOT.war 压缩:jar -cvfM0 ROOT.war ./
- 2022-07-25 第四组 java之抽象、接口
目录 一.抽象类 1.概念 2.抽象类以及抽象方法格式定义 3.抽象类总结规定 二.接口 1.什么是接口 2.接口的定义 3.接口特性 4.抽象类和接口的区别 5.继承抽象类和实现接口的异同 6.规则 ...