自定义指令

默认设置的核心指令( 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的更多相关文章

  1. 手写vue中v-bind:style效果的自定义指令

    自定义指令 什么是自定义指令 以 v- 为前缀,然后加上自己定义好的名字组成的一个指令就是自定义指令.为什么要有自定义指令呢?在有些时候,你仍然需要对普通的DOM元素进行底层的操作,这个时候就可以用到 ...

  2. Vue中插槽指令

    08.29自我总结 Vue中插槽指令 意义 就是在组件里留着差值方便后续组件内容新增 而且由于插件是写在父级中数据可以直接父级中传输而不需要传子再传父有些情况会减少写代码量 示例 <div id ...

  3. Vue基础系列(四)——Vue中的指令(上)

    写在前面的话: 文章是个人学习过程中的总结,为方便以后回头在学习. 文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. VUE基础系列目录 < ...

  4. Vue基础系列(五)——Vue中的指令(中)

    写在前面的话: 文章是个人学习过程中的总结,为方便以后回头在学习. 文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. VUE基础系列目录 < ...

  5. Vue中基本指令用法

    指令在Vue中是个很重要的功能,在Vue项目中是必不可少的.根据官网的介绍,指令 (Directives) 是带有 v- 前缀的特殊属性.指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地 ...

  6. vue.js实现内部自定义指令和全局自定义指令------directive

    在Vue中,我们平时数据驱动视图时候,内部自带的指令有时候解决不了一些需求,这时候,Vue给我们一个很好用的东东 directive 这个单词是我们写自定义指令的关键字哦 之定义指令为我们提供了几个钩 ...

  7. vue视频: 自定义指令 && 拖拽 && 自定义键盘信息

    v-textv-forv-html 指令: 扩展html语法 自定义指令:1. 自定义属性指令: Vue.directive(指令名称,function(参数){ this.el -> 原生DO ...

  8. vue中的指令v-model

    Vue的指令:其实就是单个JavaScript表达式,一般来说是带有v-前缀:都有着对应的官网介绍:https://cn.vuejs.org/v2/guide/forms.html v-model:数 ...

  9. Vue中的指令(听博主说总结的很好)

    指令[重点] 作用:简化Dom操作 参考:https://cn.vuejs.org/v2/api/#%E6%8C%87%E4%BB%A4 特点: 1.都是以v-开头 2.除了插值表达式,其它都写在标签 ...

  10. 017——VUE中v-fo指令的使用方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

随机推荐

  1. iOS大神班笔记01-项目中常见的文件

    1.Info.plist文件:项目配置文件 主要作用:保存应用的信息,软件名称等等,相当于身份 证.程序加载首先加载配置文件,读取软件名称等信息. Bundle display name:项目名称 B ...

  2. XJOI NOIP模拟题1

    第一题 分析: 开始想的是贪心,取每列均值最大一段. 应该是01分数规划,具体看代码 代码: program gold; var a:..]of int64; n,i,m,j,x:longint; f ...

  3. 【bzoj3685】普通van Emde Boas树 权值zkw线段树

    原文地址:http://www.cnblogs.com/GXZlegend/p/6809743.html 题目描述 设计数据结构支持:1 x  若x不存在,插入x2 x  若x存在,删除x3    输 ...

  4. HDU - 2814 Visible Trees

    题意: m*n(1<=m,n<=100000)的森林里,起始点在(1,1),某人从(0,0)点开始看,问能看到多少棵树. 题解: 求出1~x中的每个数与1~y的数中互质的数的总和.用素数筛 ...

  5. 基于类的通用视图(Class-based generic views)

    在web开发中,最令人头痛的就是一遍又一遍的重复固定的模式.在解决了模板层面和模型层面的重复代码之痛之后,Django使用通用视图来解决视图层面的代码重复. 扩展通用视图 毫无疑问通用视图可以大幅度地 ...

  6. Linux 安装配置JDK

    一.下载jdk 参考:http://www.codingyun.com/article/40.html 可以先下载到本地,然后ftp到服务器 也可以直接在服务器下载(windows版本的区分32位与6 ...

  7. tips 前端 点击事件

    新手总是时不时会纠结一下 点击事件 我们都知道这些小东西不难 但是偶尔难道不会想想我们可能对这些即使小kiss的问题的认知其实不够清晰 一个认识不清晰的东西使用时 总会有油然而生的不安感 从而用的不放 ...

  8. 微信设置URL之WebApi方式

    微信公众号开发者设置里的URL,现在采用WebAPI的方式,结果一直报“未能正确设置Token”的错误,采用Handler和MVC的方式倒是可以. 解决步骤一,添加服务器IP到白名单. 解决步骤二,确 ...

  9. ping & traceroute 原理

    说明: 忘记从哪里看到的原文了. 不过我应该进行了大刀阔斧的删选. ping 用类型码为0的ICMP发请 求,受到请求的主机则用类型码为8的ICMP回应. ping程序来计算间隔时间,并计算有多少个包 ...

  10. webdiyer aspnet pager最近又用这个。还是记录下。

    这个是页面里的代码需要在上面引入: <%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer&quo ...