小程序中Component組件怎么使用?下面本篇文章給大家分享一下小程序自定義組件Component超全實用指南,希望對大家有所幫助!

在小程序中,想要將頁面內的功能模塊抽象出來,在不同的頁面中重復使用,我們可以使用它的自定義組件,自定義組件可以將復雜的頁面拆分成多個低耦合的模塊,這樣不僅使用起來方便,而且還有助于我們的代碼維護。【相關學習推薦:小程序開發教程】
前言
本文你將收獲
-
小程序如何使用自定義組件
-
自定義組件之間的各種傳值
-
自定義組件中插槽的使用
-
排雷,本文的小程序指的是微信小程序(不過其他的小程序思路應該差不多)
-
排雷,本文主要內容是自定義組件的各種用法,不是教大家怎么封裝組件哈!
基礎準備(可忽略)
新增文件夾
首先在根目錄下創建一個專門放自定義組件的文件夾(文件夾名稱任意,位置也任意)

新建Component文件
然后在小程序編輯器里,右鍵,新建Component

為什么要特意說這一步呢?
不知道有沒有小伙伴們和我一樣一直只把小程序開發工具當預覽工具用,然后開發是用其他編輯器的。

后面發現直接在小程序新建Component或者Page,它會一口氣把四個文件都建好,并且內容模板也會填好,所以現在開發者工具除了預覽,我還用它新建文件。

示例背景說明
我們后面就以類似下圖中的模塊分割標題為例寫一個簡單的組件示例(只是瞎舉例)

怎么引入自定義組件?
創建不多說,如以上【新建Component文件】即可,如果是自己手動創建,別忘了在json文件聲明(小程序開發工具新建的默認就有)
{ "component": true }
引入組件方法

在頁面的 json 文件中進行引用聲明
<!-- 引用組件的json文件 --> { "usingComponents": { "x-title": "/components/title/title" } }
在頁面的 wxml 中像使用基礎組件一樣使用自定義組件(名字和聲明的保持一致)
<!-- 引用組件的wxml文件 --> <x-title></x-title>
怎么傳值?
父組件給子組件傳值
可以看到我們上面把標題的內容寫死了,但是實際中使用我們肯定是需要根據不同的模塊,傳入不同的標題內容,這樣我們就需要使用到父子之間的傳值了。
父級給子級傳值
<!-- 父級wxml --> <x-title titleText="全部訂單"></x-title> <!-- 如果父級的值是一個變量則 --> <x-title titleText="{{currentTitle}}"></x-title>
子級接收父級傳過來的值
<!-- 子級js --> properties: { titleText:{ type:String, value:'其他' } },

子組件給父組件傳值
把組件稍微修改一下,新增了詳情操作按鈕,當前通過循環已得出多個模塊,現在想在點擊詳情的時候,子級把當前模塊的id傳給父級。

子組件給父組件傳參
<!-- 子級wxml --> <view class="title-oper" bindtap="gotoDetail">詳情</view>
<!-- 子級js --> gotoDetail(){ this.triggerEvent('gotoDetail',this.data.titleId) }

父組件接收子組件的參數
<!-- 父級 wxml --> <x-title titleText="{{item.title}}" titleId="{{item.id}}" bind:gotoDetail="gotoDetail"></x-title>
<!-- 父級 js --> //通過e.detail獲取子組件傳過來的參數 gotoDetail(e){ const id = e.detail console.log('從子組件接收到的id',id) }

父級調用子組件的方法
子組件定義了一個方法
<!-- 子級 js --> childMethod(){ console.log('我是子組件的方法') },
父級先給子組件一個id
<!-- 父級 wxml --> <x-title id="titleCom"></x-title> <van-button type="primary" bindtap="triggerChildMethod">調用子組件方法</van-button>
在js頁面的生命周期中獲取組件,然后存到我們自定義的變量titleCom中,接著便可直接調用子組件里面的方法了
<!-- 父級 js --> onReady(){ this.titleCom = this.selectComponent("#titleCom"); }, triggerChildMethod(){ this.titleCom.childMethod(); }

如果this.selectComponent()返回為null
1、檢查wxml定義的id和js使用的是否一致;
2、自定義組件是否渲染,例如你使用了wx:if,導致組件還未渲染
傳值官網相關文檔:
https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/events.html
在自定義組件中使用插槽(slot)
我們上面在自定義組件中加了【詳情】查看的操作按鈕,但是有的地方我們可能并不想用文字,想改成圖標或者按鈕,當某處放置的節點內容不確定時,我們就可以使用插槽來處理。
插槽就相當于在子組件中放一個占位符,這樣父組件就可以向子組件填充html了。

單插槽

在子組件加入插槽
<!-- 子級 wxml --> <slot></slot>
父級即可在組件內任意填充內容,比如插入一個圖標(如果子級沒有加slot,及時填充了html也不會被渲染)
<!-- 父級 wxml --> <x-title> <view class="oper-wrap"> <van-icon name="arrow" /> </view> </x-title>

多插槽

先在子組件的js開啟一下多slot支持
<!-- 子級 js --> options: { multipleSlots: true // 在組件定義時的選項中啟用多slot支持 },
在子組件加上插槽需要給插槽加上名字
<!-- 子級 wxml --> <slot name="icon"></slot> <slot name="oper"></slot>
在父級使用
<!-- 父級 wxml --> <view class="icon-wrap" slot="icon"> <van-icon name="orders-o" size="24"/> </view> <view class="oper-wrap" slot="oper"> <van-button type="primary" custom-style="{{customStyle}}">
站長資訊網