一,子组件数据跟着父组件改变
父组件的代码
1 <template>
2 <div class="home">
3 <img alt="Vue logo" src="/../assets/logo.png">
4 <!--<HelloWorld msg="Welcome to Your Vue.js App"/>-->
5 父组件的值<input type="text" v-model="parentVal">
6 <div>
7 <child-test :inputData="parentVal"></child-test>
8 </div>
9 </div>
10 </template>
11 <script>
12 // @ is an alias to /src
13 import HelloWorld from '@/components/HelloWorld.vue'
14 import ChildTest from '@/components/child-test.vue'
15 export default {
16 name: 'home',
17 components: {
18 HelloWorld,ChildTest
19 },
20 data() {
21 return {
22 parentVal: 100,
23 }
24 },
25 }
26 </script>
知识兔子组件的代码如下:
1 <template>
2 <div class="child">
3 子组件<input type="text" v-model="childVal">
4 </div>
5 </template>
6 <script>
7 export default {
8 name: 'child',
9 props: {
10 inputData: {
11 }
12 },
13 data() {
14 return {
15 childVal: this.inputData
16 }
17 },
18 watch: {
19 inputData(newVal){
20 this.childVal = newVal;
21 }
22 }
23 }
24 </script>
知识兔总结:父组件通过props传值给子组件,子组件通过watch监听父组件传过来的值改变来重新更新子组件的值。以此来达到子组件的值跟随父组件的值改变。如果不使用watch,虽然父组件传过来的值改变了,但是子组件不会自动更新。
二,父组件数据跟着子组件改变
父组件代码
1 <template>
2 <div class="home">
3 <img alt="Vue logo" src="/../assets/logo.png">
4 <!--<HelloWorld msg="Welcome to Your Vue.js App"/>-->
5 父组件的值<input type="text" v-model="parentVal">
6 <div>
7 <child-test @childValInput="childVal" :inputData="parentVal"></child-test>
8 </div>
9 </div>
10 </template>
11 <script>
12 // @ is an alias to /src
13 import HelloWorld from '@/components/HelloWorld.vue'
14 import ChildTest from '@/components/child-test.vue'
15 export default {
16 name: 'home',
17 components: {
18 HelloWorld,ChildTest
19 },
20 data() {
21 return {
22 parentVal: 100,
23 }
24 },
25 methods: {
26 childVal(val) {
27 this.parentVal = val;
28 }
29 }
30 }
31 </script
知识兔子组件代码
1 <template>
2 <div class="child">
3 子组件<input type="text" v-model="childVal">
4 </div>
5 </template>
6 <script>
7 export default {
8 name: 'child',
9 data() {
10 return {
11 childVal: 10
12 }
13 },
14 watch: {
15 childVal(newVal){
16 this.$emit('childValInput',this.childVal)
17 }
18 }
19 }
20 </script>
知识兔总结:父组件中要@方法来接收子组件传递的emit,使用时要在methods中定义一下来使用。