微信小程序基础

118 阅读2分钟

一、插槽的使用

  • 子组件:slotTest

  • 父组件:home

1.一个插槽

组件模板:

<view>
  <slot></slot>
  <view>这里是插槽组件的内部细节</view>
</view>

使用:

<view>
  <slot></slot>
  <view>这里是插槽组件的内部细节</view>
</view>
2.多个插槽

在组件的js文件里写入 multipleSlots: true

<slot-test>
  <!-- 这部分内容将被放置在组件 <slot name="before"> 的位置上 -->
  <view slot="before">这里是插入到组件slot name="before"中的内容</view>
  <!-- 这部分内容将被放置在组件 <slot name="after"> 的位置上 -->
  <view slot="after">这里是插入到组件slot name="after"中的内容</view>
</slot-test>

组件模板 使用多个slot,用name区分

<view>
  <slot name="before"></slot>
  <view>这里是插槽组件的内部细节</view>
  <slot name="after"></slot>
</view>

在父组件使用:

<slot-test>
  <!-- 这部分内容将被放置在组件 <slot name="before"> 的位置上 -->
  <view slot="before">这里是插入到组件slot name="before"中的内容</view>
  <!-- 这部分内容将被放置在组件 <slot name="after"> 的位置上 -->
  <view slot="after">这里是插入到组件slot name="after"中的内容</view>
</slot-test>

二、父子组件之间的通信

总共有三种方式

  1. 属性绑定:父组件向子组件传值,仅能传递普通类型的数据,无法将方法传递给子组件
  2. 事件绑定:子组件向父组件传值,可以传递任意数据
  3. 获取组件实例:父组件还可以通过this.selectComponent()获取子组件实例对象,这样可以直接访问子组件的任意数据和方法

父向子传值

父组件中:

<props-test count="{{count}}"></props-test>

子组件中:

Component({
  /**
   * 组件的属性列表
   */
  properties: {
    count: Number
  }
  })
<text>我是子组件中的count:{{count}}</text>

子向父传值

事件绑定

  1. 在父组件中定义一个函数;
syncCount(e){
  
 },
  1. 在父组件中通过自定义事件的形式,将函数传给子组件(使用bind:自定义事件名称)
<props-test count="{{count}}" bind:sync="syncCount"></props-test>
  1. 在子组件中通过调用this.triggerEvent('自定义事件名称',{/* 参数对象 */}) ,将数据发送到父组件;
<text>我是子组件中的count:{{count}}</text>
<button bindtap="addCount">count+1</button>
 methods: {
   addCount() {
     this.setData({
       count: this.properties.count + 1
     })
     //触发自定义事件将value传给父组件
     this.triggerEvent('sync', this.properties.count)
   }
 }
  1. 在父组件中通过e.detail来获取子组件传来的数据;
 syncCount(e){
    console.log("e", e);
    this.setData({
      count:e.detail
    })
  },