一、.sync修饰符
<comp :foo.sync="bar"></comp>
等价于
<comp :foo="bar" @update:foo="val => bar = val"></comp>
当子组件需要更新 foo 的值时,需要显式地触发一个更新事件:
this.$emit('update:foo', newValue)
示例:
<template>
<div class="details">
<myComponent :show.sync='valueChild' style="padding: 30px 20px 30px 5px;border:1px solid #ddd;margin-bottom: 10px;"></myComponent>
<button @click="changeValue">toggle</button>
</div>
</template>
<script>
import Vue from 'vue'
Vue.component('myComponent', {
template: `<div v-if="show">
<p>默认初始值是{{show}},所以是显示的</p>
<button @click.stop="closeDiv">关闭</button>
</div>`,
props:['show'],
methods: {
closeDiv() {
this.$emit('update:show', false);
}
}
})
export default{
data(){
return{
valueChild:true,
}
},
methods:{
changeValue(){
this.valueChild = !this.valueChild
}
}
}
</script>
vue 修饰符sync的功能是:当一个子组件改变了一个 prop 的值时,这个变化也会同步到父组件中所绑定的变量。
二、@click.stop与@click.prevent
@click.stop :阻止事件冒泡 vue中点击事件直接在元素中使用@click="click"即可,但是有时在一个元素中包含了子元素,而且父元素和子元素都有点击事件,此时我们希望的点击效果就是:点击子元素区域的的时候,不触发父级元素的点击事件
@click.prevent :阻止事件的默认行为,
<a href="http://www.baidu.com" @click.prevent="test4">百度一下</a>
<form action="/xxx" @submit.prevent="test5">
<input type="submit" value="注册">
</form>
参考文章: [1] 深入理解vue 修饰符sync【 vue sync修饰符示例】
|