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

Définition du modèle d'observateur JavaScript et explication détaillée des instances d'événements DOM

伊谢尔伦
Libérer: 2017-07-24 14:33:03
original
1492 Les gens l'ont consulté

Modèle d'observateur (modèle de publication-abonnement) : il définit une relation de dépendance un-à-plusieurs entre les objets. Lorsque l'état d'un objet change, tous les objets qui en dépendent seront avertis.

En JavaScript, le modèle d'événement est généralement utilisé pour remplacer le modèle d'observateur traditionnel.
Avantages :

(1) peut être largement utilisé dans la programmation asynchrone et constitue une alternative au passage de fonctions de rappel.

(2) peut remplacer le mécanisme de notification codé en dur entre les objets. Un objet n'a plus besoin d'appeler explicitement une interface d'un autre objet. Les deux objets sont facilement découplés.

Événements DOM – exemple classique de modèle d'observateur

Nous devons surveiller le clic de l'utilisateur sur document.body, mais nous n'avons aucun moyen de prédire quand l'utilisateur clique sur document.body. l'utilisateur cliquera.
Donc, nous nous abonnons à l'événement click sur document.body. Lorsque l'on clique sur le nœud body, le nœud body publie ce message aux abonnés !


document.body.addEventListener("click", function() {
  console.log(1);
}, false);

// 可以多个订阅者
document.body.addEventListener("click", function() {
  console.log(2);
}, false);

doucment.body.click();
Copier après la connexion

Un certain site Web a un en-tête, une navigation, une liste de messages et d'autres modules. Le rendu de ces modules nécessite l'obtention des informations de connexion de l'utilisateur.
(1) Écriture générale :


$.ajax({
  url: './login',
  type: 'post',
  contentType: 'application/json',
  dataType:'json',
  success: function(data) {
    if(data.status === "success") {
      // 登录成功,渲染header、nav
      header.setInfo(data.headerInfo);
      nav.setInfo(data.navInfo);
    }
  }
});
Copier après la connexion

(2) Grâce au modèle observateur, il est facile de découpler !


$.ajax({
  ...,
  success: function(data) {
    if(data.status === "success") {
      // 登录成功,发布登陆成功消息
      login.trigger("loginsuccess", data);
    }
  }
});

var header = (function() {
  // 监听消息
  login.listen("loginsuccess", function(data){
    header.setInfo(data.headerInfo);
  });
  return {
    setInfo: function(data) {
      console.log("设置header信息");
    }
  };
})();

var nav = (function() {
  login.listen("loginsuccess", function(data){
    nav.setInfo(data.navInfo);
  });
  return {
    setInfo: function(data) {
      console.log("设置nav信息");
    }
  }
})();
Copier après la connexion

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!