过滤器
vue.js允许自定义过滤器用来作为一些常见文本的格式化,比如将字母由小写转为大写或者截取某个字符串的一部分。
过滤器可以用在两个地方:插值和v-bind指令。
在vue1.0中有一些过滤器,但是在vue2.0中所有过滤器 都被废弃了,需要用户自定义过滤器。
<p>{{username|uppercase}}</p>
过滤器可以串联
<p>{{username|uppercase|abbr}}</p>
例1:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue</title>
</head>
<body>
<div id="app">
<p>{{username|uppercase|abbr}}</p>
</div>
<script src="../vue.js"></script>
<script src="main.js"></script>
</body>
</html>
var app=new Vue({
el:"#app",
data:{
username:"xiaoming"
},
filters:{
uppercase:function (value) {
return value.toUpperCase();
},
abbr:function (value) {
return value.slice(0,3);
}
}
});
例2:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue</title>
</head>
<body>
<div id="app">
<p>{{tel|hide}}</p>
</div>
<script src="../vue.js"></script>
<script src="main.js"></script>
</body>
</html>
var app=new Vue({
el:"#app",
data:{
tel:"15522228038"
},
filters:{
hide:function (value) {
return value.slice(0,3)+"****"+value.slice(7,11);
}
}
});
v-on指令监听DOM事件来触发javascript回调函数
<input type="button" v-on:click="test()" value="按钮">
事件回调函数可以传入$event这个事件对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<input type="text" @keydown="test($event)">
</div>
<script src="../vue.js"></script>
<script src="main.js"></script>
</body>
</html>
var app=new Vue({
el:"#app",
methods:{
test:function($event){
if($event.keyCode==13){
$event.target.blur(); //按键盘的回车键失去焦点
}
}
}
});
事件的修饰符
.stop修饰符用来阻止事件冒泡
div中嵌套了一个input标签,分别都有自己的点击事件。当没有.stop修饰符时,点击input按钮是会先执行input上的事件然后再执行div上的事件。也就是会先弹出B再弹出A
测试一下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<div @click="test_1">
username:<input type="text"> <input type="button" value="检索" @click="test_2">
</div>
</div>
<script src="../vue.js"></script>
<script src="main.js"></script>
</body>
</html>
var app=new Vue({
el:"#app",
methods:{
test_1:function(){
alert("A");
},
test_2:function(){
alert("B")
}
}
});
如果将这句
username:<input type="text"> <input type="button" value="检索" @click="test_2">
改为
username:<input type="text"> <input type="button" value="检索" @click.stop="test_2">
就会发现此时点击input按钮时只会弹出B,阻止了事件的冒泡。
.prevent修饰符取消事件的默认动作。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<div>
username:<input type="text">
</div>
<form action="http://www.baidu.com" method="get" @submit.prevent="test_3">
<input type="submit" value="提交表单">
</form>
</div>
<script src="../vue.js"></script>
<script src="main.js"></script>
</body>
</html>
var app=new Vue({
el:"#app",
methods:{
test_3:function(){
alert("c");
}
}
});
当点击提交表单按钮时,应该先弹出C再跳转到百度的首页,但是加上.prevent修饰符后依然会执行test3弹出C,但是不会跳转到百度的首页,因为.prevent修饰符取消事件的默认动作。
.capture 修饰符捕获冒泡事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<div @click.capture="test_1">
username:<input type="text"> <input type="button" value="检索" @click="test_2">
</div>
</div>
<script src="../vue.js"></script>
<script src="main.js"></script>
</body>
</html>
var app=new Vue({
el:"#app",
methods:{
test_1:function(){
alert("A");
},
test_2:function(){
alert("B")
}
}
});
在div中加入.capture修饰符后,点击input按钮,同样也只会弹出B。
.self 只在当前控件触发事件。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<div @click.self="test_1">
username:<input type="text"> <input type="button" value="检索" @click="test_2">
</div>
</div>
<script src="../vue.js"></script>
<script src="main.js"></script>
</body>
</html>
var app=new Vue({
el:"#app",
methods:{
test_1:function(){
alert("A");
},
test_2:function(){
alert("B")
}
}
});
加上.self修饰符后,当点击div时会弹出A,点击input时只会弹出B,不会产生连带反应。事件只会在当前的控件上被触发。
.once 事件只会执行一次
加上.once修饰符后事件只会执行一次。
<input type="button" value="单击">
第二次点击这个按钮时事件不会被触发。
表单控件绑定
可以用 v-model 指令在表单控件上创建双向数据绑定。
<input type="text" v-model="username" value="文本框"/>
v-model 会忽略所有表单元素的 value、checked、selected 特性的初始
值,因为它会以模型层的数据作为初始值。
data:{username:"Scott" }
此时文本框中默认显示的是Scott,而不是文本框。
v-model 指令可以用来绑定复选框。
<input type="checkbox" v-model="sport" value="足球"/>足球
<input type="checkbox" v-model="sport" value="篮球"/>篮球
<input type="checkbox" v-model="sport" value="羽毛球"/>羽毛球
<input type="checkbox" v-model="sport" value="游泳"/>游泳
<p>{{sport}}</p>
data:{
sport:[]
}
选中哪个复选框时,值就会显示在网页中。如果想要设置默认值
data:{sport:["足球"] }
此时就设置了默认值是足球。
单选按钮的绑定 v-model 指令可以用来绑定单选按钮。
和复选框基本一样,只是因为是单选框所以data中保存的是一个字符而不是数组。
<input type="radio" v-model="sex" value="男">男
<input type="radio" v-model="sex" value="女">女
<input type="radio" v-model="sex" value="保密">保密
<p>{{sex}}</p>
data:{
sex:"保密"
}
此时默认的选项是保密。
v-model 指令可以用来绑定下拉列表。
<select v-model="nation">
<option value="汉族">汉族</option>
<option value="藏族">藏族</option>
<option value="蒙古族">蒙古族</option>
<option value="回族">回族</option>
<option value="朝鲜族">朝鲜族</option>
</select>
<p>{{nation}}</p>
data:{
nation:"汉族"
}
此时默认选项为汉族。
lazy 修饰符
v-model 在 input 事件中同步输入框的数据 ,但可以添加一个 lazy 修饰 符,从而转变为在 change 事件中同步。
<input type="text" v-model.lazy="username"/>
<p>{{username}}</p>
如果想自动将用户的输入值转为 Number 类型,可以添加一个 number 修饰符。
<input type="text" v-model.number="salary"/>
<p>{{salary}}</p>
因为文本框中输入的内容默认为字符串的格式,所以此时我们需要用到.number修饰符来将字符串转化为数字。
如果要自动过滤用户输入的首尾空格,可以添加 trim 修饰符到 v-model 上过滤输入,忽略空格。
<input type="text" v-model.trim="address"/>
<p>{{address}}</p>