自定义事件的激活与监听

自定义事件激活

自定义组件触发事件时,需要使用  triggerEvent  方法,指定事件名、detail对象和事件选项。

其中,like 表示自定的事件, behavior: status  表示  detail  对象,事件选项的属性不可以开发者自己定义,有bubbles、composed、capturePhase

// 激活
let status = this.properties.like ? "like" : "cancel";
this.triggerEvent('like', {
behavior: status
}, {});

自定义事件监听

自定义事件绑定在组件上,并触发相应的函数。

<v-like like='{{classicData.like_status}}' count='{{classicData.fav_nums}}' bind:like='onLike'></v-like>

点赞&取消点赞

新建一个新的组件 like ,引入 Http 类的目的是为了发送网路请求,且根据 like_or_cancel 值的不同,调用不同的接口,完成点赞与取消点赞。

import {
Http
} from '../utils/Http.js';
class LikeModel extends Http {
like(like_or_cancel, artID, category) {
let url = like_or_cancel == 'like' ? '/like' : '/like/cancel';
this.request({
url: url,
method: 'POST',
data: {
art_id: artID,
type: category
},
success: (data) => {
console.log(data)
}
})
}
}
export {
LikeModel
}

在classic组件中,引入 like 组件,并调用 like 方法。

// pages/classic/classic.js
// 引入ClassicModel类,并实例化一个对象
import {
ClassicModel
} from '../../models/Classic.js';
import {
LikeModel
} from '../../models/Like.js';
let classicModel = new ClassicModel();
let likeModel = new LikeModel();
Page({

/**
* 页面的初始数据
*/
data: {
classicData: null
},
onLike: function(event) {
console.log(event);
let like_or_cancel = event.detail.behavior;
likeModel.like(like_or_cancel, this.data.classicData.id, this.data.classicData.type);
},

/**
* 生命周期函数--监听页面加载
*/
onLoad: function(options) {
classicModel.getLatest((res) => {
console.log('classic页面数据为:', res);
this.setData({
classicData: res
})
});

}
})