摘要:机制跨小程序页面的事件注册,派发,广播机制。代码实现通过调用注册事件。通常我们需要特意绑定然后才能使用绑定方式推荐使用
机制:
跨小程序页面的事件注册,派发,广播机制。
代码实现
</>复制代码
var broadcast = {
// 通过调用 broadcast.on 注册事件。其他页面都可以通过调用 broadcast.fire 触发该事件
// 参数说明:如果 isUniq 为 true,该注册事件将唯一存在;如果值为 false或者没有传值,每注册一个事件都将会被存储下来
on: function (name, fn, isUniq) {
this._on(name, fn, isUniq, false)
},
// 通过调用 broadcast.once 注册的事件,在触发一次之后就会被销毁
once: function (name, fn, isUniq) {
this._on(name, fn, isUniq, true)
},
_on: function (name, fn, isUniq, once) {
var eventData
eventData = broadcast.data
var fnObj = {
fn: fn,
once: once
}
if (!isUniq && eventData.hasOwnProperty(name)) {
eventData[name].push(fnObj)
} else {
eventData[name] = [fnObj]
}
return this
},
// 触发事件
// 参数说明:name 表示事件名,data 表示传递给事件的参数
fire: function (name, data, thisArg) {
console.log("[broadcast fire]: " + name, data)
var fn, fnList, i, len
thisArg = thisArg || null
fnList = broadcast.data[name] || []
if (fnList.length) {
for (i = 0, len = fnList.length; i < len; i++) {
fn = fnList[i].fn
fn.apply(thisArg, [data, name])
if (fnList[i].once) {
fnList.splice(i, 1)
i--
len--
}
}
}
return this
},
data: {}
}
module.exports = broadcast
</>复制代码
业务上的应用举例
1 app.js 里面注册一个监听登陆页面登录成功的事件
步骤如下:
注册一个监听登录成功的事件
</>复制代码
// 引入 broadcast
const {
broadcast
} = require("utils/util")
// 注册一个监听登录成功的事件
// 在login页面执行
broadcast.on("login_success", function () {
wx.redirectTo({
url: `/pages/${name}/index`
})
})
在 login 页面登录成功后,触发该事件
</>复制代码
// 引入 broadcast
var {
broadcast
} = require("../../utils/util")
// 触发事件 login_success
broadcast.fire("login_success")
2 在商品报损页注册一个监听报损商品 code 的事件
这个例子主要体现了使用 broadcast.fire 进行传参的功能
</>复制代码
// 引入 broadcast
var {
broadcast
} = require("../../utils/util")
// 触发事件 setBrokenBikeCode
// "bikeid": "0100010010"
broadcast.fire("setBrokenBikeCode", "0100010010")
</>复制代码
// 引入 broadcast
var {
broadcast
} = require("../../utils/util")
...
function next (bikecode) {
that.setData({
bikecode
})
}
...
// 注册事件 setBrokenBikeCode
broadcast.on("setBrokenBikeCode", (bikecode) => {
next(bikecode)
})
3 适当的时候使用 broadcast.on 的时候需要绑定 this 值
绑定方式1:
</>复制代码
var that = this
broadcast.on("showRiding", function() {
console.log(this) // 值为null
that.showRiding()
})
原因:如上代码可见,在 broadcast.on 里面打印出的 this 值为 null,在这个函数体内 this 指向不明确所以值为 null。通常我们需要特意绑定 this, 然后才能使用
绑定方式2:
推荐使用
</>复制代码
broadcast.on("showRiding", function() {
this.showRiding()
}.bind(this))
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/96525.html
摘要:轮播图插件前言写这个插件的原因前段时间准备用加上网易云的接口,模拟网易云音乐移动端。目前主要实现了无缝轮播,自动播放,端左右按钮点击切换,移动端手势滑动切换。 轮播图插件(Broadcast.js) 前言:写这个插件的原因 前段时间准备用vue加上网易云的nodejs接口,模拟网易云音乐移动端。因为想自己写一遍所有的代码以及加固自己的flex布局,所以没有使用UI组件。在轮播图部分,...
摘要:轮播图插件前言写这个插件的原因前段时间准备用加上网易云的接口,模拟网易云音乐移动端。目前主要实现了无缝轮播,自动播放,端左右按钮点击切换,移动端手势滑动切换。 轮播图插件(Broadcast.js) 前言:写这个插件的原因 前段时间准备用vue加上网易云的nodejs接口,模拟网易云音乐移动端。因为想自己写一遍所有的代码以及加固自己的flex布局,所以没有使用UI组件。在轮播图部分,...
摘要:轮播图插件前言写这个插件的原因前段时间准备用加上网易云的接口,模拟网易云音乐移动端。目前主要实现了无缝轮播,自动播放,端左右按钮点击切换,移动端手势滑动切换。 轮播图插件(Broadcast.js) 前言:写这个插件的原因 前段时间准备用vue加上网易云的nodejs接口,模拟网易云音乐移动端。因为想自己写一遍所有的代码以及加固自己的flex布局,所以没有使用UI组件。在轮播图部分,...
摘要:性能卓越的模板引擎简洁的模版语法,简单的,关键还能前后端共用模板,简直就是前端开发利器。是由阿里巴巴部门推出的矢量图标管理网站。是一个简单的设备检测工具。 artTemplate 性能卓越的 js 模板引擎 简洁的模版语法,简单的API,关键还能前后端(Nodejs)共用模板,简直就是前端开发利器。今天有个想法,把artTemplate封装下,模版render后给input等注册几个事...
阅读 1166·2023-04-26 02:56
阅读 24617·2021-11-23 09:51
阅读 2058·2021-09-26 10:14
阅读 3153·2019-08-29 13:09
阅读 2287·2019-08-26 13:29
阅读 713·2019-08-26 12:02
阅读 3709·2019-08-26 10:42
阅读 3146·2019-08-23 18:18