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对象模型-执行模型
Apr 28 Javascript
JavaScript实现统计文本框Textarea字数增强用户体验
Dec 21 Javascript
js显示时间 js显示最后修改时间
Jan 02 Javascript
关于javascript event flow 的一个bug详解
Sep 17 Javascript
javascript 表格内容排序 简单操作示例代码
Jan 03 Javascript
JavaScript实现将文本框的值插入指定位置的方法
Aug 13 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
Dec 04 Javascript
Vue.js在使用中的一些注意知识点
Apr 29 Javascript
vue2.0使用swiper组件实现轮播的示例代码
Mar 03 Javascript
Echarts地图添加引导线效果(labelLine)
Sep 30 Javascript
KnockoutJS数组比较算法实例详解
Nov 25 Javascript
微信小程序swiper使用网络图片不显示问题解决
Dec 13 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安全配置方法
2007/06/16 PHP
php cli换行示例
2014/04/22 PHP
php中in_array函数用法探究
2014/11/25 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
PHP等比例压缩图片的实例代码
2018/07/26 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
2018/08/15 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
下拉列表select 由左边框移动到右边示例
2013/12/04 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
NodeJS遍历文件生产文件列表功能示例
2017/01/22 NodeJs
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
nodejs集成sqlite使用示例
2017/06/05 NodeJs
jQuery AJAX 方法success()后台传来的4种数据详解
2018/08/08 jQuery
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
vue-quill-editor富文本编辑器简单使用方法
2018/09/21 Javascript
jquery获取img的src值实例介绍
2019/01/16 jQuery
浅谈python类属性的访问、设置和删除方法
2016/07/25 Python
Python去除、替换字符串空格的处理方法
2018/04/01 Python
python3 读写文件换行符的方法
2018/04/09 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
2019/08/18 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
python 写一个水果忍者游戏
2021/01/13 Python
如何做好总经理助理
2013/11/12 职场文书
我爱我家教学反思
2014/05/01 职场文书
党员违纪检讨书
2015/05/05 职场文书
法定授权委托证明书
2015/06/18 职场文书
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js
高通2023 年将发布高性能PC处理器
2022/04/29 数码科技
Nginx 常用配置
2022/05/15 Servers
python中validators库的使用方法详解
2022/09/23 Python