场景描述:爸爸给儿子钱,儿子要花钱怎么办?儿子打电话(触发事件)向爸爸要钱。
我们先写一个父Vue:
<template>
<div class="app">
App.vue 我现在有 {{total}}
<hr>
<Child :money="total" v-on:update:money="total = $event"/>
</div>
</template>
<script>
import Child from "./Child.vue";
export default {
data() {
return { total: 10000 };
},
components: { Child: Child }
};
</script>
再写一个子Vue:
<template>
<div class="child">
{{money}}
<button @click="$emit('update:money', money-100)">
<span>花钱</span>
</button>
</div>
</template>
<script>
export default {
props: ["money"]
};
</script>
很显然,这是一个简单的“花钱”小程序,但是在上面的vue中的<Child :money="total" v-on:update:money="total = $event"/>
这句话是什么意思呢?意思就是我们在这里监听update:money
,如果我们不进行监听,那么它在被改变的时候父亲就不知道值被改变了,但是这样的写法过于繁琐,所以我们约定把这句话可以改写成:<Child :money.sync="total" />
,他的意思就是获取到要改变的值,如果这个值更新了就会触发后面的事件。
- 最后注意Vue中有三个规则:
- 组件不能修改
props
外部数据 this.$emit
可以触发事件,并传参$event
可以获取$emit
的参数