Maison > interface Web > js tutoriel > le corps du texte

Mécanisme d'enregistrement, de répartition et de diffusion js_Event sur les mini-pages du programme

php是最好的语言
Libérer: 2018-08-03 11:01:50
original
1787 Les gens l'ont consulté

Mécanisme :

Mécanisme d'enregistrement, d'envoi et de diffusion des événements sur les mini-pages de programme.

Mise en œuvre du code

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
Copier après la connexion
Exemple d'application métier

1 Enregistrez-en une dans app.js Surveillez le événement de connexion réussie sur la page de connexion

Les étapes sont les suivantes :

Enregistrer un événement de connexion réussie sur la page de connexion

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

Déclencher le événement après une connexion réussie sur la page de connexion Événement

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

2 Enregistrez un événement sur la page de rapport de dommage du produit pour surveiller le code du produit signalé comme endommagé

Cet exemple reflète principalement l'utilisation de Broadcast.fire pour transmettre des paramètres Fonction

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

3 Lorsque vous utilisez Broadcast.on de manière appropriée, vous devez lier cette valeur

.
  • Méthode de liaison 1 :

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

Cause : Comme le montre le code ci-dessus, cette valeur imprimée dans Broadcast.on est nul et le pointeur this dans le corps de cette fonction n'est pas clair, donc la valeur est nulle. Habituellement, nous devons le lier spécifiquement avant de pouvoir utiliser la

  • Méthode de liaison 2 :

Il est recommandé d'utiliser

broadcast.on(&#39;showRiding&#39;, function() {
 this.showRiding()
}.bind(this))
Copier après la connexion

Articles connexes :

Présentation de la page d'inscription au développement du programme WeChat Mini

Comment surveiller les événements en naviguant entre les pages du programme WeChat Mini

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal