Преамбула
В предыдущей главе я познакомил вас с пользовательскими компонентами мини-программ WeChat, а в этой главе я хочу рассказать о еще одной мощной функции мини-программ — пользовательских событиях.
Что такое настраиваемое событие? Вы можете просто понять это так: при срабатывании некоторых событий дочернего компонента оно также может вызвать событие, соответствующее родительскому компоненту, и изменить некоторые данные в родительском компоненте.Событие является настраиваемым событием.
Ребята, которые прочитали и изучили учебник по пользовательским компонентам, официально предоставленный апплетом, определенно будут иметь такое же желание ругаться, как и я...
Потому что вышесказанное действительно сбивает с толку...
Но ничего, сегодня блогер подробно объяснит пользовательские события апплета WeChat.
структура корпуса
Прежде всего, я все же объясню вам это в виде кейса (это также поможет всем лучше понять это)
Кратко ознакомьтесь с содержанием кейс-проекта (на основе кейса пользовательского компонента в предыдущей главе).
название проекта:component
пользовательский подкомпонент cpt
Родительский компонент:logs
в подкомпонентеcpt
Существует кнопка, которая отображает значение, сохраненное в данный момент компонентом кнопки.counter
.
родительский компонентlogs
цитата триcpt
Дочерний компонент, у которого есть собственная первая переменная в родительском компонентеtotal
.
Каждый раз, когда нажимается другая кнопка, значение на кнопке увеличивается на разные размеры,
в то же времяtotal
В переменную записывается сумма значений трех кнопок, как показано на рисунке:
писать подкомпоненты
cpt.wxml
<!-- 这是自定义组件的内部WXML结构 -->
<view class="inner">
<button bindtap="_incrementCounter">{{counter}}</button>
</view>
В подкомпоненте cpt есть кнопка, кнопка добавляет событие клика_incrementCounter
, в то же время содержимое кнопки отображает ее значениеcounter
cpt.js
Component({
properties: {
// 这里定义了num属性,属性值可以在组件使用时指定
num: { // num定义的就是点击每个按钮分别增加的数值,可以在调用组件的时候进行更改
type: Number,
value: 1
}
},
data: {
// 这里是一些组件内部数据
counter: 0 // counter定义的是每个按钮上的数值
},
methods: {
// 这里是一个自定义方法,每次点击按钮增加对应的数值
_incrementCounter (e) {
let num = this.data.num
this.setData({
counter: this.data.counter + num
})
// 微信小程序中是通过triggerEvent来给父组件传递信息的
this.triggerEvent('increment', {num: num}) // 将num通过参数的形式传递给父组件
}
}
})
написать родительский компонент
После написания дочернего компонента его можно использовать в родительском компоненте.logs
на который ссылается, и установить для него пользовательское событие
(Не забудьте добавить в родительский компонент.json
ссылка в файле)logs.json
{
"navigationBarTitleText": "查看启动日志",
"usingComponents": {
"component-tag-name": "../components/cpt/cpt"
}
}
logs.wxml
<!--logs.wxml-->
<view class="container log-list">
<!-- 以下是对一个自定义组件的引用 -->
三个按钮总和: {{total}}
<component-tag-name bindincrement="incrementTotal" num="2"></component-tag-name>
<component-tag-name bindincrement="incrementTotal" num="3"></component-tag-name>
<component-tag-name bindincrement="incrementTotal" num="5"></component-tag-name>
</view>
Здесь есть пробел, который стоит выделить: когда дается официальный вызов дочернего компонента в родительском компоненте, он используется для добавления к нему событий привязки.bind:increment
форма, но после того, как вы ее попробуете, вам все равно придется использоватьbindincrement
Этот способ написания полезен.increment
То есть, когда вы определяете дочерний компонент, вы передаетеtriggerEvent
Имя переданного события.
logs.js
Page({
data: {
logs: [],
total: 0, // 父组件中的数据total用以记录三个按钮总和
},
incrementTotal (e) { // 定义父组件的
console.log(e.detail) // 通过e.detail获取点击的那个对象
var num = e.detail.num
this.setData({
total: this.data.total + e.detail.num
})
},
})
При нажатии на три кнопки соответственно видно, что значения изменились, а вывод консолиe.detail
Имеются также соответствующиеnum
Атрибуты.
послесловие
Через простой небольшой пример здесь представлены пользовательские события в апплете Те, кто выучил vue.js, узнают, каково это снова выучить vue.js o(╥﹏╥)o На самом деле, я лично думаю, что официальный документ Он хорошо написан, и студенты, которые хотят изучать небольшие программы, также могут следовать инструкциям в официальной документации.