事件默认冒泡:

当点击按钮,先触发点击按钮事件,再向上层冒泡

<body>
	<div id="app">
		<div class="inner" @click='divhandle'>
		<input type="button" value="戳我" @click='btnhandle'>
		</div>
	</div>
	<script >
		var vm = new Vue({
			el:'#app',
			data:{
				
			},
			methods:{
				divhandle(){
					console.log('触发点击inner事件');
				},
				btnhandle(){
					console.log('触发点击btn事件');
				}
			}
		})
	</script>
</body>

  

事件修饰符

  • .stop阻止冒泡
    <div class="inner" @click='divhandle'>
    		<input type="button" value="戳我" @click.stop='btnhandle'>
    		</div>
    

      

 

 

 

  • .prevent阻止默认事件

<div id="app">
		<!-- <div class="inner" @click='divhandle'>
		<input type="button" value="戳我" @click.stop='btnhandle'>
		</div> -->
		<a href="http://www.baidu.com" @click.prevent='linkclick'>百度</a>
	</div>
	<script >
		var vm = new Vue({
			el:'#app',
			data:{
				
			},
			methods:{
				divhandle(){
					console.log('触发点击inner事件');
				},
				btnhandle(){
					console.log('触发点击btn事件');
				},
				linkclick(){
					console.log('触发链接点击事件');
				},
			}
		})
	</script>

  

 阻止a标签的默认跳转行为

  • .capture 添加事件侦听器使用事件捕获模式
<div class="inner" @click.capture='divhandle'>
		<input type="button" value="戳我" @click.stop='btnhandle'>
		</div>
//事件从外到里

  

 

 

 

  • .self只当事件在元素本身(比如本身子元素)触发时触发回调
<div class="inner" @click.self='divhandle'>
		<input type="button" value="戳我" @click.stop='btnhandle'>
		</div>
//只有点击inner块自身才触发divhandle事件,点击button时不触发divhandle事件

  

 

 

 

  • .once事件只触发一次
<a href="http://www.baidu.com" @click.prevent.once='linkclick'>百度</a>
//只触发一次事件处理函数,包括prevent事件,click.once.prevent也一样

  .stop和.self

两个都有阻止冒泡的效果,但是stop阻止所有冒泡,self只阻止当前元素冒泡,不影响其它冒泡

例如,outer-inner-button三层,在button @click.stop,只发生button事件,阻止冒泡,不发生outer,inner的click事件;

在inner @click.self,点击button,只发生button和outer事件。

v-modle和双向数据绑定

<div id="app">
		<h4>{{msg}}</h4>
		<input type="text" v-bind:value="msg">
	</div>
	<script >
		var vm = new Vue({
			el:'#app',
			data:{
				msg:'敲代码啦'
			},
			methods:{
				
			}
		})
	</script>

  v-bind只能实现数据单向绑定,从M绑定到V,无法实现双向绑定

<div id="app">
		<h4>{{msg}}</h4>
		<input type="text" style='width: 100%;' v-model="msg">
</div>
	<script >
		var vm = new Vue({
			el:'#app',
			data:{
				msg:'敲代码啦'
			},
			methods:{
				
			}
		})
	</script>

  使用v-model可以实现表单元素和model中数据的双向绑定

注意:v-model只能运用在表单元素中

input(radio,text,address,email...

select

checkbox

textarea