Home  >  Article  >  Web Front-end  >  js_Event registration, dispatch, and broadcast mechanism across mini program pages

js_Event registration, dispatch, and broadcast mechanism across mini program pages

php是最好的语言
php是最好的语言Original
2018-08-03 11:01:501780browse

Mechanism:

Event registration, dispatch and broadcast mechanism across mini program pages.

Code implementation

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
Business application example

1 Register a monitoring login in app.js The event of successful login on the page

The steps are as follows:

Register an event to listen for successful login

// 引入 broadcast
const {
  broadcast
} = require(&#39;utils/util&#39;)
// 注册一个监听登录成功的事件
// 在login页面执行
broadcast.on(&#39;login_success&#39;, function () {
  wx.redirectTo({
    url: `/pages/${name}/index`
  })
})

After the login page is successfully logged in, this event is triggered

// 引入 broadcast
var {
  broadcast
} = require(&#39;../../utils/util&#39;)
// 触发事件 login_success
broadcast.fire(&#39;login_success&#39;)

2 Register an event to monitor the code of the damaged product on the product damage report page

This example mainly reflects the function of using broadcast.fire to pass parameters

// 引入 broadcast
var {
  broadcast
} = require(&#39;../../utils/util&#39;)
// 触发事件 setBrokenBikeCode
// "bikeid": "0100010010"
broadcast.fire(&#39;setBrokenBikeCode&#39;, &#39;0100010010&#39;)
// 引入 broadcast
var {
  broadcast
} = require(&#39;../../utils/util&#39;)
...
function next (bikecode) {
   that.setData({
      bikecode
   })
}
...
// 注册事件 setBrokenBikeCode
broadcast.on(&#39;setBrokenBikeCode&#39;, (bikecode) => {
   next(bikecode)
})

3 When using broadcast.on appropriately, you need to bind this value

  • Binding method 1:

var that = this
broadcast.on(&#39;showRiding&#39;, function() {
 console.log(this) // 值为null
 that.showRiding()
})

Reason: As can be seen from the above code, the value of this printed in broadcast.on is null. In the body of this function, the point of this is unclear, so the value is null. Usually we need to specifically bind this before we can use

  • Binding method 2:

Recommended to use

broadcast.on(&#39;showRiding&#39;, function() {
 this.showRiding()
}.bind(this))

Related Article:

Introduction to WeChat Mini Program Development Registration Page

How to monitor events when jumping between WeChat Mini Program pages

The above is the detailed content of js_Event registration, dispatch, and broadcast mechanism across mini program pages. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn