深入解析Vue父子组件通信 -双向数据绑定问题

父子组件通信小结以及双向数据绑定问题

1.先扯个淡

学习了一天的Vue组件化开发,脑瓜子嗡嗡的。遇事不要慌,先去吃个快餐。吃饱才有力气扯淡,程序员还是应该以身体为重。鄙人健身三年,有喜欢运动的小伙伴欢迎私聊深入交流一下。

2.步入正题,有这样一个需求:

1.子组件可以获取父组件的data数据
2.子组件中的输入框可以修改获取到的data数据
3.子组件在修改获取到的数据同时反过来改变父组件的data数据

3.实现过程

1.首先子组件获取父组件的data数据相信大家一定不陌生,只需要通过props自定义属性即可。(prop 是子组件用来接受父组件传递过来的数据的一个自定义属性。父组件的数据需要通过 props 把数据传给子组件,子组件需要显式地用 props 选项声明 “prop”)


    

很简单的操作 输出成功:深入解析Vue父子组件通信 -双向数据绑定问题_第1张图片2.接下来 我们要通过input输入框改变props中获取的数据内容,很多人会想到通过v-model实现数据双向绑定。那么可行吗?可行,但是会有一点小问题。 修改template标签内容 通过v-model绑定number1和number2

  

输出结果如下:深入解析Vue父子组件通信 -双向数据绑定问题_第2张图片可以看到我们确实可以通过输入框输入内容实现对props内数据的修改。但是红彤彤的报错我们还是不瞎的。将报错内容百度翻译一下。在这里插入图片描述大概的意思就是 props中是我们从父组件中获取的数据对吧。那么vue不想让你直接在子组件中修改这个数据,这样会造成一些逻辑的混乱。而是想让你通过父组件修改这个数据。那么我们可以通过data()函数来实现

components:{
                cpn:{
                   template:'#cpn',
                   props:{
                    number1:Number,
                    number2:Number
                   },
                data(){
                return{
                  dnumber1:this.number1,
                  dnumber2:this.number2
              }
            }
        }
        }

同时改变标签内容

 

props:{{number1}}

data:{{dnumber1}}

props:{{number2}}

data:{{dnumber2}}

3.最后我们想要通过input改变父组件中的data,首先奉上完整代码





    
    
    
    Document
    



    

首先我们在input中绑定事件@input=“number1input”,这个事件的作用是每次触发input事件就通过$emit发送给父组件。父组件接收后将事件中的value值赋给num完成数据的双向传递。

4.问题补充:

Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.

初学vue很容易一不小心遇到这个错误,这是因为你标签中有多个标签时,需要一个根组件将它们全部包含起来。

本文转自:SDK社区(sdk.cn)是一个中立的社区,这里有多样的前端知识,有丰富的api,有爱学习的人工智能开发者,有风趣幽默的开发者带你学python,还有未来火热的鸿蒙,当各种元素组合在一起,让我们一起脑洞大开共同打造专业、好玩、有价值的开发者社区,帮助开发者实现自我价值!

你可能感兴趣的:(vue.js)