v-on事件绑定(可以简写为@)
例:
//绑定点击事件
<button type="button" name="button" v-on:click="increase">Increase</button>
//绑定鼠标在里面移动事件
<p v-on:mousemove="updateCoordinates"></p>
//绑定键盘按下事件 里面的alertMe是vue里面的方法或属性
<input type="text" name="name" v-on:keyup="alertMe">
//绑定键盘 enter 和 space(空格) 键按下事件
<input type="text" name="name" v-on:keyup.enter.space="alertMe">
v-bind绑定HTML标签的属性(可以简写为:)
例:
//这个是没用的,无法生效
<a href="{{ link }}">Baidu</a>
//这个才是正确写法,用来绑定href属性
<a v-bind:href="link">Baidu</a>
//这是简写方法
<a :href="link">baidu</a>
v-model数据双向绑定
例:
<!-- 利用v-model实现双向数据绑定 -->
<input type="text" v-model="name"><br />
{{ name }}
<br />
<input type="text" v-bind:value='name' v-model='name'/>
//对应的script
<script type="text/javascript">
//实例化一个vue对象
new Vue({
el:'#app', //绑定要执行的模块
data:{ //对象的data数据,里面是一些属性和值
name:'Vane'
}
})
</script>
exercise01
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>06.exercise-result</title>
</head>
<body>
<div id="exercise">
<!-- 1.点击按钮显示一个alert提示 -->
<button type="button" name="button" v-on:click="alertMe">Show Alert</button>
<!-- 2.监听keydonw事件,并且存储数据到一个data属性中去 -->
<div> //我的测试方法
<input type="text" v-on:keydown="mytest"/>
<p>
{{ value }}
</p>
</div>
<!-- 3.将2中的keydown进行扩展,只允许Enter事件的触发 -->
<div>
<input type="text" v-on:keydown.enter="value = $event.target.value"/>
<p>
{{ value }}
</p>
</div>
</div>
<script type="text/javascript" src="../node_modules/vue/dist/vue.min.js"></script>
<script type="text/javascript">
new Vue({
el:"#exercise",
data:{
value:''
},
methods:{
alertMe:function(){
alert('Alert');
},
mytest:function(event){
this.value = event.target.value;
}
}
})
</script>
</body>
</html>
exercise02
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>01.listening-event-propagation</title>
</head>
<body>
<div id="app">
<!-- 函数的参数传递,可以将事件$event作为参数传递到函数中 -->
<button type="button" name="button" v-on:click="increase(2,$event)">Click me</button>
<!-- 可以直接在click事件中设置变量值 -->
<button type="button" name="button" v-on:click="counter++">counter++</button>
<p>
{{ counter }} -> {{ counter * 2 }} -> {{ counter * 2 > 10 ? "大于10了" : "小于10呢" }}
</p>
<p v-on:mousemove="updateCoordinates">
Coordinates: {{ x }} / {{ y }}
- <span v-on:mousemove="dummy">停止鼠标事件</span>
<!-- 也可以利用.stop来进行操作,则不需要函数支持 -->
<span v-on:mousemove.stop="">停止鼠标事件</span>
</p>
<input type="text" name="name" v-on:keyup="alertMe">
<br/>
<!-- 可以限制函数在什么事件下才触发,当前限制的是在enter和space键操作keyup的时候触发alertMe函数 -->
<input type="text" name="name" v-on:keyup.enter.space="alertMe">
</div>
<script type="text/javascript" src="../node_modules/vue/dist/vue.min.js"></script>
<script type="text/javascript">
new Vue({
el: '#app',
data: {
counter:0,
x:0,
y:0
},
methods: {
increase: function( step, event ) {
this.counter += step;
},
updateCoordinates:function(event){
this.x = event.clientX;
this.y = event.clientY;
},
dummy:function(event){
//stopPropagation方法阻止事件冒泡到父元素,阻止任何父事件处理程序被执行
event.stopPropagation();
},
alertMe:function(){
alert('Alert');
}
}
});
</script>
</body>
</html>
计算属性的用法
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>01.listening-event-propagation</title>
</head>
<body>
<div id="app">
<!-- 函数的参数传递,可以将事件$event作为参数传递到函数中 -->
<button type="button" name="button" v-on:click="increase(2,$event)">Click me</button>
<!-- 可以直接在click事件中设置变量值 -->
<button type="button" name="button" v-on:click="counter++">counter++</button>
<p>
{{ counter }} -> {{ counter * 2 }} -> {{ counter * 2 > 10 ? "大于10了" : "小于10呢" }}
</p>
<p v-on:mousemove="updateCoordinates">
Coordinates: {{ x }} / {{ y }}
- <span v-on:mousemove="dummy">停止鼠标事件</span>
<!-- 也可以利用.stop来进行操作,则不需要函数支持 -->
<span v-on:mousemove.stop="">停止鼠标事件</span>
</p>
<input type="text" name="name" v-on:keyup="alertMe">
<br/>
<!-- 可以限制函数在什么事件下才触发,当前限制的是在enter和space键操作keyup的时候触发alertMe函数 -->
<input type="text" name="name" v-on:keyup.enter.space="alertMe">
</div>
<script type="text/javascript" src="../node_modules/vue/dist/vue.min.js"></script>
<script type="text/javascript">
new Vue({
el: '#app',
data: {
counter:0,
x:0,
y:0
},
methods: {
increase: function( step, event ) {
this.counter += step;
},
updateCoordinates:function(event){
this.x = event.clientX;
this.y = event.clientY;
},
dummy:function(event){
//stopPropagation方法阻止事件冒泡到父元素,阻止任何父事件处理程序被执行
event.stopPropagation();
},
alertMe:function(){
alert('Alert');
}
}
});
</script>
</body>
</html>
watch的用法
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>06.exercise</title>
</head>
<body>
<div id="exercise">
<!--
1) 控制按钮让其结果值如果等于37的时候就打印出“done”的字符内容
-->
<div>
<p>当前值:{{value}}</p>
<button @click="value += 5">加5</button>
<button @click="value += 1">加1</button>
<p>结果:{{result}}</p>
</div>
<!--
2) 监控value值,让其在5秒以后使其值自动重置,利用setTimeout
-->
<div>
<input type="text">
<p>{{value}}</p>
</div>
</div>
<script type="text/javascript" src="../node_modules/vue/dist/vue.min.js"></script>
<script type="text/javascript">
new Vue({
el: '#exercise',
data:{
value: 0
},
computed: {
result:function(){
return this.value == 37 ? 'done' : 'test';
}
},
watch:{
value:function(value){
console.log(value);
var vm = this;
console.log(this);
setTimeout(function(){
vm.value = 0;
},5000);
}
},
});
</script>
</body>
</html>