Плагин апплета WeChat
предисловие
после последнегоНаучите, как реализовать пользовательские компоненты в апплете WeChatДавно это было (друзьям, кто не знает, советую посмотреть, т. к. многие плагины похожи на компоненты), 13 марта этого года в апплет добавлен апплет** "плагин"функции и новые инструменты разработчикаФункция «Код-фрагмент»**, то есть в базовой библиотеке апплета1.9.6Что касается версии, разработчикам разрешено разрабатывать плагины и в то же время предоставлять плагины для других апплетов, что, несомненно, приносит хорошие новости разработчикам, поскольку разные апплеты могут использовать общий код, что значительно сэкономит затраты на разработку. сейчас~
Доступ к плагину мини-программы
В отличие от пользовательских компонентов, подключаемый модуль апплета можно легко встроить в собственный код.Для активации функции подключаемого модуля апплета необходимо перейти на официальный сайт.Подробные процедуры доступа и документы можно найти на официальном веб-сайте .Мини-руководство по доступу к подключаемым модулям программы, конечно, это не главная цель этой статьи, цель этой статьи — научить вас разрабатывать плагин для апплета WeChat~
Реализация
создать шаблон
Чтобы разработать небольшой программный плагин, предварительной подготовки должно быть достаточно.Мы открываем его в инструменте разработчика и следуем обычным шагам, чтобы создать новый небольшой программный проект, и выбираем«Создать шаблон быстрого запуска плагина»,нетAppID
Друг мой, я предлагаю зайти на официальный сайт, чтобы зарегистрировать его, потому что не хватаетAppID
, ограничены не только некоторые функции, но и отладка на реальной машине~
Структура проекта
После создания проекта плагина инструменты разработчика автоматически создадут новый проект плагина.Структура примера проекта, представленного на официальном сайте, выглядит следующим образом:
Давайте сначала познакомимся~
Проект содержит две директории:
-
miniprogram
Каталог: Размещена небольшая программа, которая используется для отладки и тестирования плагинов. -
plugin
Каталог: каталог хранения кода подключаемого модуля, который используется для размещения разработанных нами подключаемых модулей.
Первый такой же, как и обычный апплет, мы можем разработать его в обычном режиме, а затем использовать для отладки плагинов, предварительного просмотра и обзора, разница в том, чтоapp.json
а такжеproject.config.json
Есть еще несколько настроек плагина. Все они сделаны официальными лицами за вас и, как правило, не нуждаются в настройке. Конечно, мы также можем внести соответствующие коррективы в соответствии с реальными потребностями нашего проекта~
plugin
Структура каталогов плагинов, хранящихся в папке plugins, примерно следующая:
-
api
: Папка подключаемого модуля интерфейса, в которой могут храниться интерфейсы, необходимые для подключаемого модуля. -
components
: Папка пользовательских компонентов, предоставляемая плагином, в ней может быть несколько пользовательских компонентов. -
index.js
: файл входа в плагин, доступен здесьexport
Немногоjs
Интерфейс для пользователей плагинов -
plugin.json
: файл конфигурации подключаемого модуля, который в основном описывает, какие пользовательские компоненты могут вызываться извне подключаемым модулем, и определяет, какой файл js является файлом интерфейса js подключаемого модуля. Конфигурация по умолчанию выглядит следующим образом:
{
"publicComponents": {
"list": "components/list/list"
},
"main": "index.js"
}
Реализация
Некоторые люди могут задаться вопросом? Чувствую, что официал - это не готовый пример, зачем мне писать эту статью? На мой взгляд, примеры, приведенные на официальном сайте, слишком просты, чтобы показать использование плагинов, в примерах, приведенных на официальном сайте, много чего не задействовано, просто простой рендеринг списка данных без взаимодействия, что практически невозможно. существует в реальной разработке. Да, в большинстве случаев нам нужно выполнить ряд операций через обратный вызов плагина. Эта статья специально нацелена на болевые точки примера официального веб-сайта WeChat, рассказывая о нашем собственном процессе реализации и идеи~
хорошо, старые правила, сначала поставьте небольшую цель, мы должны реализовать плагин для селектора провинций и городов и отправлять данные при нажатии кнопки отправки, общий эффект показан на рисунке ниже~
Step1
Во-первых, мыcomponents
Создайте файл компонентаregionPicker
Папка, используемая для разработки нашего селектора провинций и городов, мы нажимаем правой кнопкой мыши и выбираем Создатьcomponent
И после завершения нейминга будут сгенерированы компоненты компонента, а именно.wxml
,.wxss
,.json
,.js
Для четырех файлов, для удобства, мы напрямую используем те, что поставляются с WeChat.picker
Осознать~
код показывает, как показано ниже:
структураregionPicker.wxml
<view class='section'>
<view class="section-title">省市区选择器</view>
<picker mode="region" bindchange="bindRegionChange" value="{{region}}" >
<view class="picker">
当前选择:{{region[0]}},{{region[1]}},{{region[2]}}
</view>
</picker>
</view>
стильregionPicker.wxss
.section{
padding: 20rpx;
}
.section-title{
font-size: 30rpx;
line-height: 40rpx;
text-align: center;
color: #666;
}
.picker{
margin: 20rpx auto;
text-align: center;
font-size: 30rpx;
color: #666;
}
js regionPicker.js
Component({
properties : {
region : {
type : Array ,
value: ['北京市', '北京市', '东城区']
}
},
data: {
},
methods : {
bindRegionChange(e){
this.setData({
region: e.detail.value
})
}
})
Это в основном то же самое, что и когда мы пишем пользовательские компоненты, привязка данных находится вregion
поля, методы, объявленные вmethods
объект, о пользовательских компонентахjs
Для тех, кто не очень знаком с написанием в документе, можно посмотреть на официальномComponent构造器
и моя последняя статьяразработка пользовательских компонентовНекоторое введение и понимание этого ~
Step2
На данный момент вы внедрили пользовательский компонент. Как применить его к другим апплетам в виде плагинов? Вам нужно настроить два места, одноplugin.json
, который объявляет наш плагин;
plugin.json
{
"publicComponents": {
"regionPicker" : "components/regionPicker/regionPicker"
},
"main": "index.js"
}
Другой — ввести его на нужной нам странице (вотindex.wxml
),Исправлятьindex.json
, импортировать плагин
index.json
{
"usingComponents": {
"regionPicker" : "plugin://myPlugin/regionPicker"
}
}
Затем вызовите его на странице
index.wxml
<!--引入插件 -->
<regionPicker />
<button class='submit'>提交</button>
Теперь эффект, который вы видите, в основном такой же, как на картинке ниже ~
Ну вроде нормально работает, проблем вроде нет~
Нет, кажется, снова возникла проблема, как мне передать данные после переключения, как мне пройти через область, которую я выбрал, когда я нажимаю кнопку отправки, действительно, давайте посмотрим~
Step3
Перечисленные выше проблемы мы решим далее.Во-первых, у нас есть опыт разработки компонентов ранее, и мы все должны знать, что мы были только вproperties
заявил в полеregion
, то, конечно, мы можем изменить его, мы вindex.js
серединаdata
поле также объявляетregion
, разница в том, что мы устанавливаем его значение равнымregion: ['广东省', '广州市', '海珠区']
, а затем привязать его к нашему плагину<regionPicker region="{{region}}"/>
После сохранения мы обнаружим, что значение плагина по умолчанию больше неПекин, Пекин, район Дунчэн, который становитсяПровинция Гуандун, город Гуанчжоу, район Хайчжу, Это решает проблему изменения значения плагина по умолчанию, и следующим шагом является событие обратного вызова!
Ну, на самом деле, callback-триггер тоже очень прост, мелкие партнеры, имеющие опыт разработки пользовательских компонентов, должны были давно подумать об этом, как и пользовательские компоненты, нам нужно толькоchange
Когда срабатывает обратный вызов, то есть мы модифицируемregionPicker.js
изbindRegionChange
Методы, как показано ниже:
bindRegionChange(e){
this.setData({
region: e.detail.value
})
// 触发回调
this.triggerEvent("changeEvent", { region: this.data.region})
}
Мы передаем каждое измененное значение обратно через обратный вызов, поэтому мы напрямуюindex.wxml
определено в<regionPicker region="{{region}}" bindchangeEvent="changeEvent" />
,передачаindex.js
серединаchangeEvent
метод может.
index.js
Page({
data: {
region: ['广东省', '广州市', '海珠区']
},
submit(){
console.log(this.data.region)
},
changeEvent(e){
console.log(e)
this.setData({
region : e.detail.region
})
},
onLoad(){
}
})
Таким образом, каждый раз при выборе области, вызванной обратным вызовом, мы можем передатьe.detail
Мы получили нужные данные~
Здесь взаимодействие данных плагина в основном нет проблем ~
Подумайте о том, что мы не использовали, плагинapi
Интерфейс, хорошо, давайте посмотрим, как это использовать ~
Step4
мы знаемapi
Роль папки заключается в определении некоторых интерфейсов плагина, мы можем определить следующие методы:
api.js
let systemInfo = null;
// 获取插件信息
function getPluginInfo() {
return {
name : 'regionPicker' ,
version : '1.0.0' ,
date : '2018-04-14'
}
}
//设置设备信息
function setSystemInfo(value){
systemInfo = value;
}
//获取设备信息
function getSystemInfo(){
return systemInfo;
}
module.exports = {
getPluginInfo ,
getSystemInfo ,
setSystemInfo
}
проходить позадиexports
Откройте интерфейс, который вы хотите использовать~
Помните наш предыдущий файл записи плагинаindex.js
Ну а теперь пригодится, мы в делеindex.js
файл импортировать нашapi.js
, чтобы мы могли выполнять некоторые операции над плагином при его загрузке.Здесь я просто получаю информацию об устройстве текущего пользователя:
var api = require('./api/api.js')
// 获取设备信息
wx.getSystemInfo({
success: function(res) {
// 存数据
api.setSystemInfo(
{
model: res.model ,
system: res.system
}
)
},
})
module.exports = {
getPluginInfo: api.getPluginInfo ,
getSystemInfo: api.getSystemInfo
}
Позже мы также увиделиexports
два методаgetPluginInfo
а такжеgetSystemInfo
, представленный здесь метод заключается в том, что аспект используется вне подключаемого модуля и предоставляет интерфейс вызывающей стороне подключаемого модуля~
Step5
После того, как мы представим плагин, как вызвать интерфейс плагина?
На самом деле, это очень просто, нам нужно толькоjs
файл (вотindex.js
)пройти черезvar plugin = requirePlugin("myPlugin")
После внедрения плагина можно получить соответствующий интерфейс.
сейчас на страницеonLoad
когда мы печатаемplugin
, консоль выводит следующее:
Видетьplugin
Содержание оказывается именно тем, что мыindex.js
прошедшийexports
Открытый интерфейс, давайте назовем его и попробуем~
Возвращает следующее:
Данные интерфейса также могут быть получены отлично, и это здорово~
Суммировать
Итак, у вас появилось новое понимание разработки подключаемых модулей апплета? На самом деле, это не так сложно, как кажется, норазработка пользовательских компонентовСходства много.Я считаю, что теперь вы в основном получили навыки разработки небольших программных плагинов, но вы еще не научились этому Цитируется в программе~
Черт, как по мне. .
о да, код размещен наgithubДрузья, которым нужно скачать его самостоятельно ~