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 相关文章推荐
简明json介绍
Sep 28 Javascript
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
Mar 15 Javascript
jQuery实现可收缩展开的级联菜单实例代码
Nov 27 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
Jun 10 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
Jul 27 Javascript
jQuery实现判断滚动条到底部
Jun 23 Javascript
浅谈angularJS 作用域
Jul 05 Javascript
jquery.validate提示错误信息位置方法
Jan 22 Javascript
在javascript中使用com组件的简单实现方法
Aug 17 Javascript
JavaScript面向对象精要(下部)
Sep 12 Javascript
解决vue build打包之后首页白屏的问题
Mar 06 Javascript
vue-amap根据地址回显地图并mark的操作
Nov 03 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
php笔记之:AOP的应用
2013/04/24 PHP
php通过baihui网API实现读取word文档并展示
2015/06/22 PHP
PHP合并数组函数array_merge用法分析
2017/02/17 PHP
PHP连接sftp并下载文件的方法教程
2018/08/26 PHP
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
如何使用Javascript正则表达式来格式化XML内容
2013/07/04 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
Javascript中的五种数据类型详解
2014/12/26 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
AngularJS实现使用路由切换视图的方法
2017/01/24 Javascript
HTML的select控件美化
2017/03/27 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
常见的浏览器Hack技巧整理
2017/06/29 Javascript
基于Bootstrap下拉框插件bootstrap-select使用方法详解
2018/08/07 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
Vue中的this.$options.data()和this.$data用法说明
2020/07/26 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
Python使用minidom读写xml的方法
2015/06/03 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
selenium+PhantomJS爬取豆瓣读书
2019/08/26 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
Java多态性的定义以及类型
2014/09/16 面试题
精细化工应届生求职信
2013/11/17 职场文书
行政专员工作职责
2013/12/22 职场文书
三年级音乐教学反思
2014/01/28 职场文书
初中语文教学反思
2014/02/02 职场文书
行政专员的岗位职责
2014/03/10 职场文书
教师党员岗位承诺书
2014/05/29 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
Django drf请求模块源码解析
2021/06/08 Python