零基础学习 Vue.JS ——(4) 事件篇

过滤器

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值