vue自定义指令的创建和使用方法实例分析


Posted in Javascript onDecember 04, 2018

本文实例讲述了vue自定义指令的创建和使用方法。分享给大家供大家参考,具体如下:

一、自定义指令的创建和使用

Vue自带的指令很多,v-for/v-if/v-else/v-else-if/v-model/v-bind/v-on/v-show/v-html/v-text...
但是这些指令都是比较偏向于工具化,有些时候在实现具体的业务逻辑的时候,发现不够用,如何来自定义指令.

1、自定义指令

① 创建

new Vue({
directives:{


change:{



bind:function(){},



update:function(){},



unbind:function(){}


}

}
})

在自定义指令时,在指令对应的配置对象中有3个处理函数指令对应的操作

bind

指令在绑定到元素要执行的操作
update

如果在调用指令时候,传了参数,当参数变化时候,就会执行update所指定的方法
unbind

解绑要执行的操作

② 使用自定义指令

directives:{
hello:{


bind:function(){},


update:function(){},


unbind:function(){}

}
}

使用:

v-hello

注意事项:

建议在给指令的命名采用小驼峰式的命名方式,比如changeBackgroundColor,在使用的时候,采用烤串式写法 v-change-background-color

(方法:参数,返回值)

bind方法以及update方法 都是有参数的,
一个是el,对应的是调用指令的元素
一个bindings,是一个对象:name/rawName/value/oldValue...

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <script src="https://cdn.bootcss.com/vue/2.0.1/vue.min.js"></script>
  <title>3water.com vue自定义指令</title>
</head>
<body>
<div id="container">
  <p>{{msg}}</p>
  <!-- 准备实现需求:
  在h1标签上面,加上一个按钮,当点击按钮时候,对count实现一次
  自增操作,当count等于5的时候,在控制台输出‘it is a test'
  -->
  <button @click="handleClick">clickMe</button>
  <h1
      v-if="count < 6"
      v-change="count">it is a custom directive</h1>
</div>
<script>
  //directive
  new Vue({
    el: '#container',
    data: {
      msg: 'Hello Vue',
      count:0
    },
    methods:{
      handleClick: function () {
        //按钮单击,count自增
        this.count++;
      }
    },
    directives:{
      change:{
        bind: function (el,bindings) {
          console.log('指令已经绑定到元素了');
          console.log(el);
          console.log(bindings);
          //准备将传递来的参数
          // 显示在调用该指令的元素的innerHTML
          el.innerHTML = bindings.value;
        },
        update: function (el,bindings) {
          console.log('指令的数据有所变化');
          console.log(el);
          console.log(bindings);
          el.innerHTML = bindings.value;
          if(bindings.value == 5)
          {
            console.log(' it is a test');
          }
        },
        unbind: function () {
          console.log('解除绑定了');
        }
      }
    }
  })
</script>
</body>
</html>

使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试,可得到如下运行效果:

vue自定义指令的创建和使用方法实例分析

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <script src="https://cdn.bootcss.com/vue/2.0.1/vue.min.js"></script>
  <title>3water.com vue自定义指令</title>
</head>
<body>
<div id="container">
  <p>{{msg}}</p>
  <h1 v-change-background-color="myBgColor">
    it is a header1
  </h1>
</div>
<script>
  new Vue({
    el: '#container',
    data: {
      msg: 'Hello Vue',
      myBgColor:'#ff0000'
    },
    directives:{
      changeBackgroundColor:{
        bind: function (el,bindings) {
          console.log('in bind ');
          console.log(bindings.value);
          el.style.backgroundColor = bindings.value;
        }
      }
    }
  })
</script>
</body>
</html>

使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试,可得到如下运行效果:

vue自定义指令的创建和使用方法实例分析

<h4 v-change-background-color="'red'">背景色</h4>这样也是可以的,但是写死了,不好

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
用js 让图片在 div或dl里 居中,底部对齐
Jan 21 Javascript
Extjs 几个方法的讨论
Jan 28 Javascript
jquery自定义滚动条插件示例分享
Feb 21 Javascript
javascript中的undefined和not defined区别示例介绍
Feb 26 Javascript
jquery实现定时自动轮播特效
Dec 10 Javascript
JS中innerHTML和pasteHTML的区别实例分析
Jun 22 Javascript
BootStrap 附加导航组件
Jul 22 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
Dec 25 Javascript
红黑树的插入详解及Javascript实现方法示例
Mar 26 Javascript
小程序实现人脸识别功能(百度ai)
Dec 23 Javascript
使用javascript做时间倒数读秒功能的实例
Jan 23 Javascript
el-form 多层级表单的实现示例
Sep 10 Javascript
用vuex写了一个购物车H5页面的示例代码
Dec 04 #Javascript
vue实现的双向数据绑定操作示例
Dec 04 #Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
Dec 04 #jQuery
jQuery利用FormData上传文件实现批量上传
Dec 04 #jQuery
vue实现的组件兄弟间通信功能示例
Dec 04 #Javascript
微信小程序模板template简单用法示例
Dec 04 #Javascript
vue项目刷新当前页面的三种方法
Dec 04 #Javascript
You might like
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
PHP spl_autoload_register实现自动加载研究
2011/12/06 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
2014/11/07 PHP
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
javascript删除option选项的多种方法总结
2013/11/22 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
完美解决iview 的select下拉框选项错位的问题
2018/03/02 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
2020/10/30 Javascript
Python入门学习之字符串与比较运算符
2015/10/12 Python
简单实现python进度条脚本
2017/12/18 Python
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
python主线程捕获子线程的方法
2018/06/17 Python
Python3.7实现中控考勤机自动连接
2018/08/28 Python
Python面向对象程序设计示例小结
2019/01/30 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
2019/04/15 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
用python 绘制茎叶图和复合饼图
2021/02/26 Python
英国最受欢迎的在线隐形眼镜商店:VisionDirect.co.uk
2018/12/06 全球购物
Vrbo英国:预订度假屋
2020/08/19 全球购物
师范生自荐信
2013/10/27 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
三方协议书
2015/01/27 职场文书
2015最新学生自我评价范文
2015/03/03 职场文书
2014年终个人总结报告
2015/03/09 职场文书
2015年财政局工作总结
2015/05/21 职场文书
导游词之介休绵山
2019/12/31 职场文书
django学习之ajax post传参的2种格式实例
2021/05/14 Python