微信小程序父子组件通信

1. 属性传值

属性传值是最常见、也是最基础的父子组件通信方式之一。在微信小程序中,父组件可以通过在子组件上绑定属性的方式向子组件传递数据,子组件则可以通过监听属性的变化来获取父组件传递过来的数据。

实现原理
  1. 父组件在使用子组件时,在子组件的标签上通过设置属性传递数据,如:
<child-component data="{{someData}}"></child-component>
  1. 子组件在接收父组件传递的数据时,通过定义properties来声明接收的属性,并可以在observer函数中监听属性的变化,如:
Component({
  properties: {
    data: {
      type: Object,
      value: {},
      observer(newVal, oldVal) {
        // 处理属性变化逻辑
      }
    }
  },
  // 其他代码
})
应用场景
  • 父组件向子组件传递静态数据或配置信息。
  • 父组件向子组件传递动态数据,如用户信息、商品信息等。
  • 子组件根据父组件传递的数据来动态渲染内容。
注意事项
  • 避免直接修改父组件传递过来的数据,应该通过子组件内部的方法进行数据处理和修改。
  • 避免过度嵌套,减少组件之间的耦合度,提高组件的复用性。

2. 事件传递

除了通过属性传值外,父组件还可以通过事件的方式与子组件进行通信。父组件可以向子组件发送事件,并传递需要的数据,子组件则可以通过监听事件来接收数据并进行相应的处理。

实现原理
  1. 父组件通过triggerEvent方法触发一个自定义事件,并传递需要的数据,如:
this.triggerEvent('customEvent', { data: someData });
  1. 子组件在attached生命周期或propertiesObserver中监听父组件触发的事件,并在事件处理函数中获取传递过来的数据,如:
Component({
  attached() {
    this.bindEvent();
  },
  propertiesObserver() {
    this.bindEvent();
  },
  methods: {
    bindEvent() {
      this.onCustomEvent = this.onCustomEvent.bind(this);
      this.parent = this.getRelationNodes('../parent-component/index')[0];
      if (this.parent) {
        this.parent.on('customEvent', this.onCustomEvent);
      }
    },
    onCustomEvent(event) {
      const { detail: { data } } = event;
      // 处理事件数据
    }
  }
})
应用场景
  • 父组件需要向子组件传递动态数据,并且需要在特定时机触发传递数据的行为。
  • 子组件需要向父组件发送消息或触发某些操作。
注意事项
  • 事件的传递是单向的,父组件向子组件传递数据,而不是相反。
  • 子组件必须在监听事件之前确保父组件已经初始化完成,以避免出现数据传递失败的情况。在父组件中引用子组件的时候。使用wx:if判断数据是否已初始化完成
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温暖前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值