>  기사  >  위챗 애플릿  >  미니 프로그램의 슬롯과 상위-하위 구성 요소 간의 여러 통신 방법에 대한 간략한 분석

미니 프로그램의 슬롯과 상위-하위 구성 요소 간의 여러 통신 방법에 대한 간략한 분석

青灯夜游
青灯夜游앞으로
2021-11-02 09:57:483104검색

이 글에서는 WeChat 애플릿의 슬롯과 부모-자식 구성 요소 통신의 여러 방법을 소개하겠습니다. 도움이 되길 바랍니다!

미니 프로그램의 슬롯과 상위-하위 구성 요소 간의 여러 통신 방법에 대한 간략한 분석

오늘은 미니 프로그램에서 슬롯과 부모-자식 컴포넌트 간의 통신에 대해 살펴보고, vue와 어떤 차이점이 있는지 살펴보겠습니다. [관련 학습 추천 : 미니 프로그램 개발 튜토리얼]

1. 슬롯

1.

사용자 정의 구성 요소의 wxml 구조에서 구성 요소 사용자wxml 结构中,可以提供一个 节点(插槽),用于承载组件使用者提供的 wxml 结构

미니 프로그램의 슬롯과 상위-하위 구성 요소 간의 여러 통신 방법에 대한 간략한 분석

其实插槽, 说的通俗一些, 就是 子组件挖坑,父组件填坑 的过程。由父组件在使用子组件的时候, 决定子组件内部的某一些布局展示

  • 子组件通过挖坑
  • 父组件通过组件标签中间的内容来填坑

2. 单个插槽

在小程序中,默认每个自定义组件中只允许使用一个  slot 占位,这种个数上的限制叫做单个插槽

  • 默认情况下,一个组件的 wxml 中只能有一个 slot
  • 需要使用多 slot 时,可以在组件 js 中声明启用
  • 注意:小程序中目前只有默认插槽和多个插槽,暂不支持作用域插槽

代码如下(示例):

<!-- 组件的封装者 -->
<view class="wrapper">
  <view>这里是组件的内部节点</view>
  <!-- 对于不确定的内容,可以使用<slot>进行占位,具体的内容由组件的使用者决定 -->
  <slot></slot>
</view>

<!-- 组件的使用者 -->
<component-tag-name>
  <!-- 这部分内容将被放置在组件<slot>的位置上 -->
  <view>这里是插入到组件slot的内容</view>
</component-tag-name>

3. 启动多个插槽

在小程序的自定义组件中,需要使用多 插槽时,可以在组件的 .js 文件中

代码如下(示例):

Component({
  options: {
    multipleSlots: true // 在组件定义时的选项中启用多 slot 支持
  },
  properties: { /* ... */ },
  methods: { /* ... */ }
})

4. 定义多个插槽

可以在组件的 .wxml 中使用多个 标签,以不同的 name

미니 프로그램의 슬롯과 상위-하위 구성 요소 간의 여러 통신 방법에 대한 간략한 분석wxml 구조를 호스팅하기 위해 노드(슬롯)를 제공할 수 있습니다. ="https://img.php.cn/upload/image/578/865/189/1635817685891354.png" title="1635817685891354.png" alt="미니 프로그램의 슬롯과 상위-하위 구성 요소 간의 여러 통신 방법에 대한 간략한 분석"/>

실제 슬롯이라고 하더군요 더 일반적인 버전은 하위 구성 요소가 구멍을 파고 상위 구성 요소가 구멍을 채우는 과정입니다. 상위 구성 요소가 하위 구성 요소를 사용할 때 하위 구성 요소 내부의 레이아웃 표시를 결정합니다

하위 구성 요소는 구멍을 뚫습니다

상위 구성 요소는 구성 요소 태그 중간에 있는 콘텐츠를 통해 구멍을 채웁니다

2 . 단일 슬롯
  • JSON미니 프로그램에서는 기본적으로 각 사용자 정의 구성 요소에 하나의 슬롯 자리 표시자가 허용됩니다. 이 수 제한을 단일 슬롯이라고 합니다.

  • 기본적으로 하나입니다. 구성 요소의 wxml

    여러 슬롯을 사용해야 하는 경우 구성 요소 에서 사용할 수 있습니다. js 활성화하는 명령문
  • 참고this.selectComponent(): 현재 미니 프로그램에는 기본 슬롯과 여러 개의 슬롯만 있으며 범위 슬롯은 아직 지원되지 않습니다

코드는 다음과 같습니다(예):

<!-- 组件模板 -->
<view class="wrapper">
  <!-- name 为 before 的第一个 slot 插槽 -->
  <slot name="before"></slot>
  <view>这是一段固定的文本内容</view>
  <!-- name 为 after 的第二个 slot 插槽 -->
  <slot name="after"></slot>
</view>
3. 다중 슬롯 시작

  • 미니 프로그램의 사용자 정의 구성 요소에서 다중 슬롯을 사용해야 하는 경우 .js 파일에 다음 코드(예제)를 추가할 수 있습니다. 구성 요소:
  • // 父组件的 data 节点
    data: {
      count: 0
    }
    
    // 父组件的wxml 结构
    <my-test3 count="{{count}}"></my-test3>
    <view>~~</view>
    <view>父组件中,count值为:{{count}}</view>

4. 여러 슬롯 정의
구성 요소의 .wxml에서 여러 태그를 사용하여 이름이 다른 여러 슬롯을 구분할 수 있습니다. 코드는 다음과 같습니다(예):

// 子组件的 properties 节点
properties: {
  count: Number
}

// 子组件的 wxml 结构
<text>子组件中,count值为:{{count}}</text>

2. 상위-하위 컴포넌트 통신

1. 상위-하위 컴포넌트 통신 방법

  • 父组件js 中,定义一个函数,这个函数即将通过自定义事件的形式,传递给子组件
  • 父组件wxml 中,通过自定义事件的形式,将步骤 1 中定义的函数引用,传递给子组件
  • 子组件js 中,通过调用 this.triggerEvent('自定义事件名称', {/* 参数对象 */}),将数据发送到父组件
  • 在父组件的 js 中,通过 e.detail 获取到子组件传递过来的数据

4. 事件绑定的核心实现代码

  • 步骤1: 在父组件的 js 中,定义一个函数,这个函数即将通过自定义事件的形式,传递给子组件

代码如下(示例):

// 父组件中定义 syncCount 方法
// 将来,这个方法会被传递给子组件,供子组件进行调用
syncCount() {
  console.log(&#39;syncCount&#39;)
},
  • 步骤 2:在父组件的 wxml 中,通过自定义事件的形式,将 步骤 1 中定义的函数引用,传递给子组件

代码如下(示例):

<!-- 使用 bind: 自定义事件名称(推荐:结构清晰) -->
<my-test3 count="{{count}}" bind:sync="syncCount"></my-test3>
<!-- 或在 bind 后面直接协商自定义事件名称 -->
<my-test3 count="{{count}}" bindsync="syncCount"></my-test3>
  • 步骤 3:在 子组件js 中,通过调用 this.triggerEvent('自定义事件名称', {/* 参数对象 */})
  • 속성 바인딩 상위 구성요소에 데이터를 하위 구성요소의 지정된 속성으로 설정하는 데 사용됩니다.
호환되는 데이터만 설정할 수 있습니다(데이터만 전달할 수 있고 메서드는 전달할 수 없음)

🎜🎜 이벤트 바인딩 하위 구성 요소가 상위 구성 요소에 데이터를 전달하는 데 사용됩니다. 모든 데이터(배열 및 메서드 포함)를 전달할 수 있습니다.🎜🎜🎜🎜구성 요소 인스턴스 가져오기 상위 구성 요소는 🎜를 통해 하위 구성 요소 인스턴스 개체를 얻을 수도 있으므로 하위 구성 요소🎜🎜🎜🎜🎜🎜2 패스 데이터의 모든 데이터 및 메서드에 직접 액세스할 수 있습니다. 속성 바인딩은 부모에서 자식으로 값을 전송하는 데 사용되며 일반적인 유형의 데이터만 전달할 수 있습니다. 메서드는 자식 구성 요소에 전달할 수 없습니다(예): 🎜
// 子组件的wxml结构
<text>子组件中,count值为:{{count}}</text>
<button type="primary" bindtap="addCount">+1</button>

// 子组件中的 js 代码
methods: {
  addCount() {
    this.setData({
      count: this.properties.count + 1
    })
    this.triggerEvent(&#39;sync&#39;, {value: this.properties.count})
  }
}
🎜🎜데이터 수락🎜🎜🎜 하위 구성 요소가 속성에 있습니다. 노드에서 해당 속성을 선언하고 사용합니다. 코드는 다음과 같습니다. 통과했다. 사용 단계는 다음과 같습니다. 🎜🎜🎜상위 구성 요소js에서 함수를 정의합니다. 이 함수는 a 형식으로 하위 구성 요소에 전달됩니다. custom event🎜🎜 상위 컴포넌트의 wxml에서 1단계에서 정의한 함수 참조를 커스텀 이벤트 형식으로 하위 컴포넌트에 전달합니다🎜🎜하위 구성요소js에서는 this.triggerEvent('custom event name', {/* 매개변수 객체*/})를 호출하여 상위 구성요소에 데이터를 보냅니다. > 상위 컴포넌트의 js에서 e.detail🎜🎜🎜🎜🎜4을 통해 하위 컴포넌트가 전달한 데이터를 가져옵니다.4 이벤트 바인딩의 핵심 구현 코드🎜 🎜🎜 🎜🎜1단계: 상위 구성 요소의 js에서 함수를 정의합니다. 이 함수는 맞춤 이벤트 형식으로 하위 구성 요소에 전달됩니다.🎜🎜🎜코드는 다음과 같습니다( 예): 🎜
syncCount(e) {
  // console.log(e.detail.value)
  this.setData({
    count: e.detail.value
  })
}
🎜🎜 2단계: 상위 구성 요소의 wxml에서 1단계에서 정의한 함수 참조를 사용자 정의 이벤트 형식으로 하위 구성 요소에 전달합니다.🎜🎜🎜코드는 다음과 같습니다. 다음과 같습니다(예):🎜
// wxml结构
<my-test3 count="{{count}}" bind:sync="syncCount" class="customA" id="cA"></my-test3>
<button bindtap="getChild">获取子组件实例</button>

getChild() { // 按钮的tap事件处理函数
  // 切记下面参数不能传递标签选择器 &#39;my-test3&#39;,不然返回的是 null
  const child = this.selectComponent(&#39;.customA&#39;) // 也可以传递 id 选择器 #cA
  child.setData({ count: child.properties.count + 1 }) // 调用子组件的 setData 方法
  child.addCount() // 调用子组件的 addCount 方法 
}
🎜🎜 3단계: 하위 구성요소js에서 this.triggerEvent('custom event name', {/* 매개변수를 호출합니다. object*/}), 상위 구성 요소에 데이터 보내기 🎜🎜🎜코드는 다음과 같습니다(예): 🎜<pre class="brush:js;toolbar:false;">// 子组件的wxml结构 &lt;text&gt;子组件中,count值为:{{count}}&lt;/text&gt; &lt;button type=&quot;primary&quot; bindtap=&quot;addCount&quot;&gt;+1&lt;/button&gt; // 子组件中的 js 代码 methods: { addCount() { this.setData({ count: this.properties.count + 1 }) this.triggerEvent(&amp;#39;sync&amp;#39;, {value: this.properties.count}) } }</pre><ul><li>步骤 4:在父组件的 <code>js 中,通过 e.detail 获取到子组件传递过来的数据

代码如下(示例):

syncCount(e) {
  // console.log(e.detail.value)
  this.setData({
    count: e.detail.value
  })
}

5. 使用 selectComponent 获取组件实例

父组件如何获得子组件实例?

可在父组件里调用  this.selectComponent("id或class选择器"),获取子组件的实例对象,从而直接访问子组件的任意数据和方法。调用时需要传入一个选择器,例如  this.selectComponent(".my-component")

代码如下(示例):

// wxml结构
<my-test3 count="{{count}}" bind:sync="syncCount" class="customA" id="cA"></my-test3>
<button bindtap="getChild">获取子组件实例</button>

getChild() { // 按钮的tap事件处理函数
  // 切记下面参数不能传递标签选择器 &#39;my-test3&#39;,不然返回的是 null
  const child = this.selectComponent(&#39;.customA&#39;) // 也可以传递 id 选择器 #cA
  child.setData({ count: child.properties.count + 1 }) // 调用子组件的 setData 方法
  child.addCount() // 调用子组件的 addCount 方法 
}

更多编程相关知识,请访问:编程入门!!

위 내용은 미니 프로그램의 슬롯과 상위-하위 구성 요소 간의 여러 통신 방법에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제