vue中自定义指令vue.direvtive,自定义过滤器vue.filter(),vue过渡transition
自定义指令
默认设置的核心指令( v-model,v-bind,v-for,v-if,v-on等 ),Vue 也允许注册自定义指令。注意,在 Vue2.0 里面,代码复用的主要形式和抽象是组件——然而,有的情况下,你仍然需要对纯 DOM 元素进行底层操作,这时候就会用到自定义指令。
自定义指令相当于为元素添加一个自定义属性,只不过是以v-开头的
自定义自定义指令的语法
注意:在vue中使用时候,要加上v-,在定义的时候,要去除v-
自定义指令和自定属性,当元素渲染的时候该属性会被删除,后者不会被删除
当我们为一个dom元素绑定一个自定义指令的时候,自定义指令会为这个元素单独创建一份自定义指令实例化对象,不是共通的。
在自定义指令中我们通过vm属性可以访问到vue的实例化对象,通过vue实例化对象,可以控制vue实例化对象 中容器元素内的其他元素
this.vm.color = 'red' //实例化对象中有color这个属性
定义自定义指令时候,我们通常定义在最前面,这样在实例化的时候才能获取到里面的内容
Vue.direvtive,这个方法接受两个参数
第一个参数是指令名称 v-去掉
第二个参数表示可以是一个对象,也可以是一个函数update函数
当是一个对象时候,有三个方法
Bind:开始绑定的回调函数
在自定义自指令被绑定到元素上执行的一个方法,这个方法在自定义指令生命中只执行一次
作用域是自定义指令实例化对象
参数是没有
Update:内容更新时的回调函数
这个方法每当其内容跟新时候都会调用一次
并且在绑定指令时候也会调用,这次是update的第一次调用,这一次只有一个参数,就是传入的数据,如果没有数据传入,那么他就是undefined
从第二次调用开始,他有两个参数
第一个参数表示新的值
第二个参数表示旧的的值
作用域就是指令实例化对象
当第二个参数是一个函数的时候,就是表示update函数
Unbind 解除绑定时候的回调函数
<div id="app">
<input type="text" v-model="msg">
<div v-hello-directive="msg">hello</div>
</div>
Vue.directive('hello-directive', {
bind: function () {
//开始绑定的回调函数
},
update: function (newValue, oldValue) {
//内容更新时的回调函数
},
unbind: function () {
//解除绑定时候的回调函数
}
})
var app = new Vue({
el: '#app',
data: {
msg: ''
}
})
Eg://输入校验
Vue.direvtive,这个方法接受两个参数
第二个参数表示可以是一个对象
<div id="app">
<input type="text" v-model="userName">
<p v-check-username="userName"></p>
</div>
Vue.directive('check-username', {
bind: function () {},
update: function (newValue, oldValue) {console.log(this)
// 判断userName值在长度只能在4-20个字符之间
// 如果不在,我们在p标签中显示 ’长度只能在4-20个字符之间‘
if (newValue.length > 20 || newValue.length < 4 && newValue.length > 0) {
this.el.innerHTML = '长度只能在4-20个字符之间';
} else {
this.el.innerHTML = '';
}
}
})
Vue.direvtive,这个方法接受两个参数
第二个参数是一个函数就是update函数
Vue.directive('check-username', function (newValue, oldValue) {
if (newValue.length > 20 || newValue.length < 4 && newValue.length > 0) {
this.el.innerHTML = '长度只能在4-20个字符之间';
} else {
this.el.innerHTML = '';
}
})
自定义过滤器
Vue类提供了一个方法叫filter
全局方法 Vue.filter() 注册一个自定义过滤器,必须放在Vue实例化前面
通过这个方法我们可以定义插值过滤器使用 {{key | filterName param}}
定义 Vue.filter(),接收两个参数
第一个参数表示过滤的名称
第二个参数表示过滤函数(return返回值)
作用域是vue的实例化对象
第一个参数是要被过滤的数据
使用过滤器时候,传入几个参数,该函数就多几个参数,并顺序是一一对应
Eg:
// 将输入内容做驼峰式命名转化 abc-def => abcDef
<div id="app">
<input type="text" v-model="msg">
<p>{{msg | toCamel}}</p>
</div>
Vue.filter('toCamel', function (str) {
return str.replace(/\-([a-zA-Z])/g, function (match, $1) {
return $1.toUpperCase();
})
})
var app = new Vue({
el: '#app',
data: {
msg: ''
}
})
Vue支持多个过滤器处理同一个数据,此时前一个过滤器的输出会作为后一个过滤器的输入
Eg:
<div id="app">
<input type="text" v-model="msg">
<p>{{msg | multiples | price title notice}}</p>
//变量是msg title notice 过滤函数的时候作为参数传入
</div>
// 定义multiples 过滤器,将msg*3
Vue.filter(multiples, function (str) {
// 将str* 3返回
return str * 3;
})
// 比如输入100得到¥100.00
Vue.filter('price', function (str, title, notice) {
console.log(arguments) msg title notice
return title + '¥' + (+str).toFixed(2) + notice
})
var app = new Vue({
el: '#app',
data: {
msg: '',
title: '裙子',
notice: '降价通知'
}
})
Vue过渡
我们可以为元素添加transition属性,此时vue会根据transition属性值创建三个类
demo-transition
demo-enter
demo-leave
我们可以对这些类添加css3动画特效实现过渡效果
.box {
width: 200px;
height: 200px;
background: red;
}
.demo-transition {
transition: all 1s;
}
.demo-enter,.demo-leave {
width: 0;
height: 0;
opacity: 0;
}
<div id="app">
<button v-on:click="showbox">btn</button>
<div class="box" transition="demo" v-show="isShow"></div>
</div>
var app = new Vue({
el: '#app',
data: {
isShow: true
},
methods: {
showbox: function () {
this.isShow = !this.isShow
}
}
})
vue中自定义指令vue.direvtive,自定义过滤器vue.filter(),vue过渡transition的更多相关文章
- 手写vue中v-bind:style效果的自定义指令
自定义指令 什么是自定义指令 以 v- 为前缀,然后加上自己定义好的名字组成的一个指令就是自定义指令.为什么要有自定义指令呢?在有些时候,你仍然需要对普通的DOM元素进行底层的操作,这个时候就可以用到 ...
- Vue中插槽指令
08.29自我总结 Vue中插槽指令 意义 就是在组件里留着差值方便后续组件内容新增 而且由于插件是写在父级中数据可以直接父级中传输而不需要传子再传父有些情况会减少写代码量 示例 <div id ...
- Vue基础系列(四)——Vue中的指令(上)
写在前面的话: 文章是个人学习过程中的总结,为方便以后回头在学习. 文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. VUE基础系列目录 < ...
- Vue基础系列(五)——Vue中的指令(中)
写在前面的话: 文章是个人学习过程中的总结,为方便以后回头在学习. 文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. VUE基础系列目录 < ...
- Vue中基本指令用法
指令在Vue中是个很重要的功能,在Vue项目中是必不可少的.根据官网的介绍,指令 (Directives) 是带有 v- 前缀的特殊属性.指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地 ...
- vue.js实现内部自定义指令和全局自定义指令------directive
在Vue中,我们平时数据驱动视图时候,内部自带的指令有时候解决不了一些需求,这时候,Vue给我们一个很好用的东东 directive 这个单词是我们写自定义指令的关键字哦 之定义指令为我们提供了几个钩 ...
- vue视频: 自定义指令 && 拖拽 && 自定义键盘信息
v-textv-forv-html 指令: 扩展html语法 自定义指令:1. 自定义属性指令: Vue.directive(指令名称,function(参数){ this.el -> 原生DO ...
- vue中的指令v-model
Vue的指令:其实就是单个JavaScript表达式,一般来说是带有v-前缀:都有着对应的官网介绍:https://cn.vuejs.org/v2/guide/forms.html v-model:数 ...
- Vue中的指令(听博主说总结的很好)
指令[重点] 作用:简化Dom操作 参考:https://cn.vuejs.org/v2/api/#%E6%8C%87%E4%BB%A4 特点: 1.都是以v-开头 2.除了插值表达式,其它都写在标签 ...
- 017——VUE中v-fo指令的使用方法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
随机推荐
- LINQ to Entities 不识别方法“System int string 转换的问题
这个问题困扰了挺久,网上找了挺多方法 都太好使. 分几种情况. 1.如果查询结果 转换,那比较容易. var q = from c in db.Customers where c.Country == ...
- hdu 2510 符号三角形 (DFS+打表)
符号三角形 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- 无法定位程序输入点GetTickCount64 在动态链接库kernel32.dll上
winxp系统,在使用boost中的thread中的sleep的时候出现“无法定位程序输入点GetTickCount64 在动态链接库kernel32.dll上”的错误, 1.在引用boost库之前( ...
- 洛谷T8115 毁灭
题目描述 YJC决定对入侵C国的W国军队发动毁灭性打击.将C国看成一个平面直角坐标系,W国一共有n^2个人进入了C国境内,在每一个(x,y)(1≤x,y≤n)上都有恰好一个W国人.YJC决定使用m颗核 ...
- MyEclipse内安装与使用SVN
安装教程 http://blog.csdn.net/u014756827/article/details/52288161 使用教程 http://www.cnblogs.com/keyi/p/594 ...
- ios手机弹出层上表单的操作,收起键盘焦点错乱的问题
今天遇到了ios手机下 弹出层上form表单 当收起键盘后,焦点错乱,无法再操作的问题 解决办法 function device() { const u = navigator.userAgent; ...
- 杭电oj2072
因为一直不能ac先发这里,希望有看到的大佬能指点一二. 先讲一下我的基本思路,首先将一整行数据保存在数组中,接着遍历数组,根据空格将每个单词存入二维数组中,最后遍历二维数组,找出其中不同的单词并计数. ...
- Linux的系统级性能剖析工具-perf
一直在找个靠谱且易用的性能分析工具,perf 貌似是很符合要求的,先给出阿里整理的几篇文档: Linux的系统级性能剖析工具-perf-1.pdf Linux的系统级性能剖析工具-perf-2.pdf ...
- (九)ubuntu解决resolv.conf被重写问题
解决resolv.conf被重写问题 来源:http://www.cnblogs.com/lanxuezaipiao/p/3613497.html 第二步中你虽然配置了DNS,但是每次重启虚拟机或重启 ...
- log4j配置文件动态指定日志文件名称
我们在项目当中经常会使用log4j进行日志记录,偶尔会遇到一些要求,比如日志文件名称按照启动参数动态配置,而不去修改log4j.xml,比较简单的一种做法是,通过设置系统属性的方式实现,代码: if( ...