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 相关文章推荐
JavaScript 闭包在封装函数时的简单分析
Nov 28 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
Jan 11 Javascript
JS获取浏览器版本及名称实现函数
Apr 02 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
May 21 Javascript
JQuery限制复选框checkbox可选中个数的方法
Apr 20 Javascript
基于javascript bootstrap实现生日日期联动选择
Apr 07 Javascript
AngularJs concepts详解及示例代码
Sep 01 Javascript
JavaScript模板引擎Template.js使用详解
Dec 15 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
Sep 29 Javascript
详解Vue源码学习之双向绑定
Apr 10 Javascript
读懂CommonJS的模块加载
Apr 19 Javascript
深入理解javascript prototype的相关知识
Sep 19 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读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
ThinkPHP查询返回简单字段数组的方法
2014/08/25 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
List the Codec Files on a Computer
2007/06/18 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
NodeJS的模块写法入门(实例代码)
2012/03/07 NodeJs
javaScript NameSpace 简单说明介绍
2013/07/18 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
原生JS实现图片轮播切换效果
2016/12/15 Javascript
addEventListener()与removeEventListener()解析
2017/04/20 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
p5.js绘制旋转的正方形
2019/10/23 Javascript
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
Python中使用Beautiful Soup库的超详细教程
2015/04/30 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
Tensorflow全局设置可见GPU编号操作
2020/06/30 Python
英国儿童图书网站:Scholastic
2017/03/26 全球购物
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
应聘教师推荐信
2013/10/31 职场文书
学年末自我鉴定
2014/01/21 职场文书
企业军训感言
2014/02/08 职场文书
小学运动会班级口号
2014/06/09 职场文书
骨干教师考核评语
2014/12/31 职场文书
给老婆的保证书
2015/01/16 职场文书
教师节表彰会主持词
2015/07/06 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
Redis高可用集群redis-cluster详解
2022/03/20 Redis