好家伙,

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.注册全局自定义指令

 
我们来到main.js中
Vue.directive('color',function(el,binding){
el.style.color = binding.value
})

搞定

That's all

 

第九十二篇:Vue 自定义指令的更多相关文章

  1. Django学习笔记第十二篇--关于自定义数据库字段数据类型

    一.需求背景: django的models模块提供了很多数据字段的数据类型field,但是总有写奇葩需求不能依靠默认字段满足,所以需要自定义数据数据库数据字段类型.所有的自定义field应该在app路 ...

  2. 第四十二篇、自定义Log打印

    1.在Xcode 8出来之后,需要我们去关闭多余的日志信息打印 2.在开发的过程中,打印调试日志是一项比不可少的工程,但是在iOS 10中NSLog打印日志被屏蔽了,就不得不使用自定义Log 3.去掉 ...

  3. 第三十二篇:vue的响应式原理

    好家伙 什么是响应式?比较官方的回答: Vue.js 的核心包括一套"响应式系统". "响应式",是指当数据改变后,Vue 会通知到使用该数据的代码. 例如,视 ...

  4. 第十二篇 Integration Services:高级日志记录

    本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...

  5. 【译】第十二篇 Integration Services:高级日志记录

    本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...

  6. 跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探

    SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如 ...

  7. Vue自定义指令使用场景

    当你第一次接触vue的时候,一定会使用到其中的几个指令,比如:v-if.v-for.v-bind...这些都是vue为我们写好的,用起来相当的爽.如果有些场景不满足,需要我们自己去自定义,那要怎么办呢 ...

  8. Vue | 自定义指令和动态路由实现权限控制

    功能概述: 根据后端返回接口,实现路由动态显示 实现按钮(HTML元素)级别权限控制 涉及知识点: 路由守卫 Vuex使用 Vue自定义指令 导航守卫 前端工程采用Github开源项目Vue-elem ...

  9. Python开发【第二十二篇】:Web框架之Django【进阶】

    Python开发[第二十二篇]:Web框架之Django[进阶]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...

随机推荐

  1. Vue2自定义插件的写法-Vue.use()

    最近在用vue2完善一个项目,顺便温习下vue2的基础知识点! 有些知识点恰好没用到时间一长就会淡忘,这样对自己是一种损失. 定义一个对象 对象里可以有任何内容 但install的函数是必不可少的,因 ...

  2. Turtle绘图——python简单上手小案例

    Turtle绘图 Turtle模块提供了在二维平面上移动的环境. Turtle可以实现位置.航向和各种可能的状态和动作. import turtle as tu roo = tu.Turtle() # ...

  3. 静态同步方法和解决线程安全问题_Lock锁

    静态的同步方法锁对象是谁?不能是thisthis是创建对象之后产生的,静态方法优先于对象静态方法的锁对象是本类的cLass属性-->class文件对象(反射) 卖票案例出现了线程安全问题 卖出了 ...

  4. react配置postcss-pxtorem适配

    适配移动端操作如下: 安装 postcss-pxtorem .amfe-flexible npm i postcss-pxtorem npm i amfe-flexible amfe-flexible ...

  5. springboot集成swagger2报Illegal DefaultValue null for parameter type integer

    springboot集成swagger2,实体类中有int类型,会报" Illegal DefaultValue null for parameter type integer"的 ...

  6. Graphics2D类

    Graphics2D类 Java语言在Graphics类提供绘制各种基本的几何图形的基础上,扩展Graphics类提供一个Graphics2D类,它拥用更强大的二维图形处理能力,提供.坐标转换.颜色管 ...

  7. SpringCloudAlibaba分布式事务解决方案Seata实战与源码分析-上

    概述 定义 Spring Cloud Alibaba Seata 官网地址 https://seata.io/zh-cn/ 最新版本1.5.2 Spring Cloud Alibaba Seata 文 ...

  8. ML.NET相关资源整理

      在人工智能领域,无论是机器学习,还是深度学习等,Python编程语言都是绝对的主流,尽管底层都是C++实现的,似乎人工智能和C#/F#编程语言没什么关系.在人工智能的工程实现,通常都是将Pytho ...

  9. 为美多商城(Django2.0.4)添加基于websocket的实时通信,主动推送,聊天室及客服系统

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_67 websocket是个啥? webSocket是一种在单个TCP连接上进行全双工通信的协议 webSocket使得客户端和服务 ...

  10. Java学习(二)Dos

    打开CMD方式 开始+系统+命令提示符 WIN键+R 输入cmd 在任意的文件夹下面,按住SHIFT键+鼠标右键,在此处打开命令行窗口 在资源管理器的地址栏前面加上cmd 路径 常用Dos命令 #盘符 ...