uniapp 子组件 props拿不到数据_Vue学习笔记之父子组件通信以及经典案例

父组件、子组件直接的访问方式:

1、父组件访问子组件可以用$childern 或者$refs

$childern 的用法:

d07d5a98e5d75ef9a4139f4899cad987.png

当父组件引用多个子组件的时候,就会生成多个对应的对象:

3e9171ce41ddd77b779e7f6cd938882e.png

$childern可以访问子组件中的方法、data等数据

835f2ba61c7716ebe6aa4be0acb29972.png

但$childern一般在开发中比较少用,用$refs比较常用,因为$refs是可以通过key来绝对定位到对应的子组件,这种方法在实际开发中比较常用。$refs是一个对象类型,默认是一个空对象,在引用的时候通过ref = key 值来生成一个实例对象:

71cd3d29678bd5fe2beabc4254a152b3.png

2、子组件访问父组件用$parent

367e2183093d76c786a09327ddf8745a.png

但是在实际开发是不会这样使用的,因为如果这样嵌套组件的话,里面的子组件就不够独立了,导致子组件的复用性不强,与父组件的耦合度高。

如果需要访问跟组件里面的方法或数据,则可以用$root进行访问:

23ff98f06f3a669704594ae18000e63c.png

经典小案例:

0、 功能需求:通过组件,有两个数据输入,由子组件输入的数字,改变父组件的数字,反之亦然,并且两个数字成倍数相互影响。

1、在我们实现这个需求的时候,我们第一想到的就是通过v-model进行输入框与data数据的绑定,由于子组件只能访问自己的数据,所以我们一开始想到的最简单的办法是:

544c824b28f041f76793130bac213507.png

但是这样编译器会反馈一个错误信息给我们:

da2f764aa0df8877f6f246c130bebd73.png

大概的意思是:避免直接修改prop里的值,应该要通过父组件进行值的修改。代替方案:通过修改子组件的Data函数进行值修改,或者通过计算的方法,替代方案如下:

4cecee8f06668355091ff5610633e476.png

此时不再报错,但是我们发现当改变输入框的值时,props里面的值时没有发生变化的。原因是Input输入框里面绑定的是data()函数中的字段。所以要改变子组件里面的数据,需要通过data函数或计算方法进行修改,不要直接绑定props里面的字段!但是展示是可以直接用props里面的字段。

2、为了实现修改props里面数据,我们将v-modle进行拆分:v-bind、v-on进行处理:

aaf43cbd7754ac9a49c5ac0b1c0c5882.png

子组件:

513b92fe28baa5c08f89b6a340348b8e.png

父组件:

65b8d6c4da303dd2c99c524dce74c0f1.png

3、第一个数字是第二个数字的倍数关系,而且改变任何一个值,就会影响另外一个值

为了实现此功能,在num1Input(event)事件中进一步修改另外一个数字的值:

8454fc298f2019ee2330bc0175c1cedc.png

改变data1的值,相应的data2的值也跟着变化:

8c35d5971126e407f4bbcbe273bc76eb.png

改变data2的值,相应的data1的值也跟着变化:

08466b3ad0e1dde3ab5c0e45a3bcf507.png

4、完整代码如下:

 Title

props1: {{number1}}

data1: {{dnumber1}}

props2: {{number2}}

data2: {{dnumber2}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值