W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
插件使用有兩種方式:靜態(tài)聲明方式 和 動態(tài)加載方式。
使用插件前,使用者需要在 app.json 中聲明需要使用的插件,示例代碼如下:
{
"plugins": {
"myPlugin": {
"version": "*", // 目前只支持設(shè)置 * 拉取當(dāng)前上架最新版本
"provider": "2019235609092837"
},
//如需聲明多個插件,重復(fù)添加自定義字段即可
"yourPlugin": {
"version": "*", // 目前只支持設(shè)置 * 拉取當(dāng)前上架最新版本
"provider": "2019235609090000"
}
}
}
說明:provider 屬性值建議使用 {{currentPluginId}}
動態(tài) APPID。
注意:
*****
拉取當(dāng)前上架最新版本。使用插件的小程序項目需要 0.60 或以上版本的 IDE 才能編譯構(gòu)建。
插件的運行要求小程序基礎(chǔ)庫為 1.22.4 及以上版本,支付寶客戶端 10.1.85 及以上的版本,小程序在使用插件的時候,需要按照如下方式兼容:
// app.js
if (!my.canIUse('plugin') && !my.isIDE) {
my.ap && my.ap.updateAlipayClient && my.ap.updateAlipayClient();
}
App({
onLaunch() {},
onShow() {},
})
注意:兼容代碼一定要放到 app.js 文件的開頭處,不能放到生命周期方法中,如果不做上述兼容處理,在基礎(chǔ)庫版本低于 1.18.0 的時候可能會導(dǎo)致頁面白屏。
可使用 基礎(chǔ)組件、擴展組件 和 自定義組件,插件的自定義組件和普通的自定義組件使用方法類似。在 json 文件中定義需要引用的插件自定義組件時,通過 plugin://
協(xié)議指明需要引用的插件自定義組件,如下所示:
{
"usingComponents": {
"hello": "plugin://myPlugin/hello"
}
}
出于對插件的保護,插件提供的自定義組件在使用上有一定的限制:默認(rèn)情況下 ref 接口無法獲得插件的自定義組件實例對象。可以通過給插件自定義組件定義 ref 定義段的方式 指定被 ref 引用時的返回值。
跳轉(zhuǎn)到插件頁面時, URL 使用 plugin://
前綴,格式為 plugin://PLUGIN_NAME/PLUGIN_PAGE
,如下所示:
<navigator url="plugin://myPlugin/hello">
Go to pages/hello page!
</navigator>
也可以使用 API 進行跳轉(zhuǎn)
my.navigateTo({
url: 'plugin://myPlugin/hello',
})
使用插件的 js 接口時,可以使用 requirePlugin 方法。
該示例先通過 requirePlugin
引用插件 API,然后訪問插件暴露的 helloApi
函數(shù)以及 world
變量。
const myPlugin = requirePlugin('myPlugin');
myPlugin.helloApi();
const word = myPlugin.world;
為了給開發(fā)者提供更好的體驗,我們提供了動態(tài)加載插件的方式,不用在 app.json 中聲明插件依賴,而是使用 my.loadPlugin 動態(tài)加載插件。這樣小程序不用啟動階段就下載插件包,而是等到使用時,再下載插件包,可以有更好的性能體驗。
使用動態(tài)加載插件前,需要在 app.json 中做如下聲明
{
"useDynamicPlugins": true
}
注意:只有加了以上聲明,才可以使用動態(tài)加載插件的方式。
使用動態(tài)加載插件的小程序項目需要 1.0 或以上版本的 IDE 才能編譯構(gòu)建。
插件的運行要求小程序基礎(chǔ)庫為 1.21.0 及以上版本,小程序在動態(tài)加載插件的時候,需要按照如下方式兼容:
// app.js
if (!my.canIUse('plugin.dynamic') && !my.isIDE) {
my.ap && my.ap.updateAlipayClient && my.ap.updateAlipayClient();
}
App({
onLaunch() {},
onShow() {},
})
在使用插件的組件、頁面或 API 之前,需要使用 my.loadPlugin 動態(tài)加載插件,如下所示
Page({
data: {
isReady: false,
},
onLoad() {
my.loadPlugin({
plugin: '2019235609092837@*', // 指定要加載的插件id和版本號,為*則每次拉取最新版本
success: () => {
const plugin = requirePlugin('dynamic-plugin://2019235609092837');
plugin.helloApi(); // 調(diào)用插件api
this.setData({ isReady: true }); // 插件已加載,可以渲染插件組件了
},
});
},
navToPluginPage() {
// 跳轉(zhuǎn)到插件頁面,hello為插件plugin.json中對外暴露的頁面
my.navigateTo({
url: 'dynamic-plugin://2019235609092837/hello'
})
}
})
<!-- 使用 component 組件 渲染插件組件 hello。hello為插件plugin.json中對外暴露的組件 -->
<component is="dynamic-plugin://2019235609092837/hello" a:if="{{isReady}}">
<view>hello</view>
</component>
<navigator url="dynamic-plugin://2019235609092837/hello">使用navigator組件跳轉(zhuǎn)到插件頁面</navigator>
<button onTap="navToPluginPage">跳轉(zhuǎn)到插件頁面</button>
動態(tài)渲染自定義組件,需要使用 component 組件。
屬性名 | 類型 | 描述 |
---|---|---|
is | String | 要渲染的插件組件。需要使用dynamic-plugin: 前綴 |
注意:
<component
is="dynamic-plugin://2019235609092837/hello"
onComMount="onComMount"
name="xiaoming"
ref="saveRef"
a:if="{{isReady}}"
>
<view>hello</view>
</component>
Page({
data: {
isReady: false,
},
onLoad() {
my.loadPlugin({
plugin: '2019235609092837@*',
success() {
this.setData({ isReady: true });
},
})
},
onComMount() {
console.log('dynamic-plugin://2019235609092837/hello is mounted')
},
saveRef(ref) {
console.log(ref);
},
})
跳轉(zhuǎn)到插件頁面,需要使用 dynamic-plugin: 前綴。格式為 dynamic-plugin:/PLUGIN_ID/PLUGIN_PAGE,其中PLUGIN_PAGE 為插件 plugin.json 中暴露的頁面。如下所示
<navigator url="dynamic-plugin://2019235609092837/hello">
Go to pages/hello page!
</navigator>
也可以使用 API 進行跳轉(zhuǎn)
my.loadPlugin({
plugin: '2019235609092837@1.2.3',
success() {
my.navigateTo({
url: 'dynamic-plugin://2019235609092837/hello',
});
},
});
注意:跳轉(zhuǎn)頁面前需要確保插件已加載。
使用插件的 js 接口時,可以使用 requirePlugin 方法,但需要使用 dynamic-plugin: 前綴。格式為: dynamic-plugin://PLUGIN_ID,如下所示
Page({
onLoad() {
my.loadPlugin({
plugin: '2019235609092837@*',
success() {
const myPlugin = requirePlugin('myPlugin');
myPlugin.helloApi();
const word = myPlugin.world;
},
})
},
})
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: