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 相关文章推荐
jQuery 使用手册(六)
Sep 23 Javascript
判断浏览器的javascript版本的代码
Sep 03 Javascript
JavaScript获取当前网页最后修改时间的方法
Apr 03 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
Jan 18 Javascript
vue.js  父向子组件传参的实例代码
Oct 29 Javascript
js实现移动端轮播图
Dec 21 Javascript
深入理解react 组件类型及使用场景
Mar 07 Javascript
Vue动态面包屑功能的实现方法
Jul 01 Javascript
深入学习Vue nextTick的用法及原理
Oct 08 Javascript
国内常用的js类库大全(CDN公共库)
Jun 24 Javascript
React Ant Design树形表格的复杂增删改操作
Nov 02 Javascript
vue实现倒计时功能
Mar 24 Vue.js
用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实现登陆验证码(类似条行码状)
2006/10/09 PHP
如何对PHP程序中的常见漏洞进行攻击(下)
2006/10/09 PHP
PHP防止跨域提交表单
2013/11/01 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
PHP中上传多个文件的表单设计例子
2014/11/19 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
PHP中each与list用法分析
2016/01/08 PHP
PHP中FTP相关函数小结
2016/07/15 PHP
mac pecl 安装php7.1扩展教程
2019/10/17 PHP
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
JavaScript 的继承
2011/10/01 Javascript
jQuery中通过ajax的get()函数读取页面的方法
2016/02/29 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
详解Web使用webpack构建前端项目
2017/09/23 Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
2018/07/25 Javascript
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
python实现三维拟合的方法
2018/12/29 Python
pyqt 多窗口之间的相互调用方法
2019/06/19 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
网页布局中CSS样式无效的十个重要原因详解
2017/08/10 HTML / CSS
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
如何进行有效的自我评价
2013/09/27 职场文书
人力资源管理专业应届生求职信
2013/09/28 职场文书
医药代表个人求职信范本
2013/12/19 职场文书
学校介绍信范文
2014/01/14 职场文书
《在大海中永生》教学反思
2014/02/24 职场文书
科技工作者先进事迹
2014/08/16 职场文书
关于教师节的广播稿
2014/09/10 职场文书
教师个人发展总结
2015/02/11 职场文书
单方投资意向书
2015/05/11 职场文书
2016猴年春节慰问信
2015/11/30 职场文书
2019年浪漫婚礼证婚词
2019/06/27 职场文书
如何用Navicat操作MySQL
2021/05/12 MySQL