评论

[生存指南]面试题(2):父子,兄弟组件之前的通信和调用

常规技术撕扯~

父子组件传递

父组件可以通过在子组件标签上使用属性来传递参数,子组件可以通过 this.properties 获取父组件传递过来的参数。

<!--父组件-->
<child-component title="这是传递给子组件的标题"></child-component>
//子组件
Component({
  properties: {
    title: String
  }
})

父组件操作子组件中的方法

这里要说一个父组件操作子组件内部Fun的方法,通过 this.selectComponent() API实现

<!--父页面引用子组件-->
<childElement id="child"></childElement>  //子组件
//子
Component({
    methods: {
         foo() {  //f方法
             console.log("this is child's fun");
        },
    }
})
//父
let child = this.selectComponent('#child'); // 页面获取自定义组件实例
child.foo(); // 通过实例调用组件事件

子父组件传递

子组件主要通过在触发事件时使用 this.triggerEvent 方法来向父组件传递参数。

<!-- 父组件 -->
<child-component bind:myevent="onMyEvent"></child-component>
<!-- 子组件 -->
<button bindtap="onButtonClick">点击我触发事件</button>
//父组件
Page({
  onMyEvent(event) {
    console.log(event.detail.message) // 输出:这是传递给父组件的消息
  }
})

//子组件
Component({
  methods: {
    onButtonClick() {
      this.triggerEvent('myevent', { message: '这是传递给父组件的消息' })
      //触发
    }
  }
})

兄弟组件之间的参数传递

兄弟组件之间的参数传递可以通过共享一个公共的父组件来实现

<!--父组件-->
<brother1-component title="{{title}}" bind:myevent="onMyEvent"></brother1-component>
<brother2-component message="{{message}}"></brother2-component>
//父组件
Page({
  data: {
    title: '这是传递给 Brother1 组件的标题',
    message: ''
  },
  onMyEvent(event) {
    this.setData({
      message: event.detail.message
    })
  }
})
//兄弟组件 哥哥
Component({
  properties: {
    title: String
  },
  methods: {
    onButtonClick() {
      this.triggerEvent('myevent', { message: '这是传递给 Brother2 组件的消息' })
    }
  }
})
// 弟弟
Component({
  properties: {
    message: String
  }
})

父组件通过属性传递的方式向 Brother1 组件传递了一个标题,通过事件触发的方式向 Brother2 组件传递了一个消息。Brother1 组件可以通过 this.triggerEvent 方法触发一个自定义事件来向父组件传递消息,父组件在接收到该事件时,再通过 setData 方法将消息传递给 Brother2 组件。

最后一次编辑于  2023-07-24  
点赞 2
收藏
评论
登录 后发表内容