vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)


Posted in Javascript onJuly 11, 2017

前言

大家都知道在Vue中,我们平时数据驱动视图时候,内部自带的指令有时候解决不了一些需求,这时候,Vue给我们一个很好用的东东来实现自定义指令,这就是directive。下面话不多说了,来一起看看详细的介绍:

directive

这个单词是我们写自定义指令的关键字哦

自定义指令为我们提供了几个钩子函数,这时候你一定好奇什么是钩子函数,说简单点,就是集中表现状态

  • bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。
  • inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。
  • update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新(详细的钩子函数参数见下)。
  • componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。
  • unbind: 只调用一次, 指令与元素解绑时调用。

下面我们开始上代码,让我们更好的理解自定义指令怎么做

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
 <script src="https://unpkg.com/vue/dist/vue.js"></script>
</head>
<body>
 <div id="app">
 
 <div class="ab" v-css="{'color':'red','font-size':'30px'}">
 hello
 </div>
 <input type="text" v-focus>
 </div>
 
</body>
</html>

在html中,我们看到了两个指令v-cssv-focus

我们自定义指令时候,一定前面要带上v-

Vue.directive("css",{
 //钩子函数 ,el就是当前元素
 inserted(el,binding){
 //el绑定的元素本身
 //binding就是css指令里面的的对象元素
 let styleobj=binding.value,arr=[];
 for(let key in styleobj){
  arr.push(key+":"+styleobj[key])
  }
 arr=arr.join(";");
 el.style.cssText=arr;
 },
 bind(el,binding) {
 //指令绑定在元素上时候执行,只执行一次
 }
});
 new Vue({
 el:'#app',
 data:{
  show:true
 },
 directives:{
 focus:{
  inserted(el,binding){
  //el绑定的元素本身
  //binding就是css指令里面的的对象元素
  el.focus();
  }
  }
 }
 });

在js里面我们可以看到

Vue.directive("css",{})

我们在 new Vue外部定义了这样一段代码,这就是我们全局自定义指令的模板方式

  • css是自定义指令的名字
  • {}里面我们写上钩子函数就可以

我们所有的钩子函数里面,基本都会有2个参数el,binding

  • el: 指令所绑定的元素,可以用来直接操作 DOM 。
  • binding 绑定元素本身的一个对象
  • vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)

从上面我们可以看到,binding里面保留绑定指令的name和value,这些很重要

局部自定义指令

directives:{
 name:{

 }
 }

区别在于,我们写在new Vue里面,里面api操作和上面的全局自定义指令一样

下面我们开始看代码运行结果

vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)

我们可以看到样式引用上去了

文本框也获取了焦点

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
用js重建星际争霸
Dec 22 Javascript
Google 静态地图API实现代码
Nov 19 Javascript
克隆javascript对象的三个方法小结
Jan 12 Javascript
通过下拉框的值来确定输入框是否可以为空的代码
Oct 18 Javascript
js 左右悬浮对联广告代码示例
Dec 12 Javascript
JQuery基础语法小结
Feb 27 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
Nov 30 Javascript
Vue.js中用v-bind绑定class的注意事项
Dec 13 Javascript
angularJS深拷贝详解
Mar 23 Javascript
基于Vue渲染与插件的加载顺序的问题详解
Mar 05 Javascript
使用vue打包进行云服务器上传的问题
Mar 02 Javascript
html实现随机点名器的示例代码
Apr 02 Javascript
javascript 玩转Date对象(实例讲解)
Jul 11 #Javascript
使用jQuery实现动态添加小广告
Jul 11 #jQuery
Vue中父组件向子组件通信的方法
Jul 11 #Javascript
实例讲解DataTables固定表格宽度(设置横向滚动条)
Jul 11 #Javascript
网页中的图片查看器viewjs使用方法
Jul 11 #Javascript
自定义事件解决重复请求BUG的问题
Jul 11 #Javascript
关于js中的鼠标事件总结
Jul 11 #Javascript
You might like
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
php对数组排序的简单实例
2013/12/25 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
2014/06/13 PHP
php中filter_input函数用法分析
2014/11/15 PHP
使用PHP实现阻止用户上传成人照片或者裸照
2014/12/25 PHP
php简单获取文件扩展名的方法
2015/03/24 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
Yii2第三方类库插件Imagine的安装和使用
2017/07/06 PHP
xmlHTTP实例
2006/10/24 Javascript
JavaScript Event学习第三章 早期的事件处理程序
2010/02/07 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
js tab栏切换代码实例解析
2019/09/03 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
python获得图片base64编码示例
2014/01/16 Python
python如何修改装饰器中参数
2018/03/20 Python
Python3中详解fabfile的编写
2018/06/24 Python
flask session组件的使用示例
2018/12/25 Python
Python调用C语言的实现
2019/07/26 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
2020/02/03 Python
ToysRus日本官网:玩具反斗城
2018/09/08 全球购物
中科方德软件测试面试题
2016/04/21 面试题
我爱读书演讲稿
2014/05/07 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
Python序列化与反序列化相关知识总结
2021/06/08 Python
MySQL学习必备条件查询数据
2022/03/25 MySQL