Table des matières
Mes doutes
Description du site officiel
Exemple de code
这是一个彩虹输入框,每输入一次都会改变颜色
Conclusion
À propos des instructions et des composants
Résumé
Maison interface Web js tutoriel Plongez en profondeur dans les décorateurs HostBinding et HostListener dans Angular

Plongez en profondeur dans les décorateurs HostBinding et HostListener dans Angular

Jul 13, 2021 pm 05:02 PM
angular 装饰器

Cet article vous fera découvrir les deux décorateurs dans Angular—— HostBinding et HostListener , présentez les scénarios d'utilisation de ces deux décorateurs.

Plongez en profondeur dans les décorateurs HostBinding et HostListener dans Angular

Mes doutes

Je ne sais pas si l'un d'entre vous a rencontré ces deux décorateurs - HostBinding et HostListener lorsque vous apprenez Angular par vous-même. Quand j'ai lu la description API de ces deux décorateurs sur le site officiel, j'étais vraiment perplexe. Je pouvais comprendre chaque mot, mais je ne pouvais tout simplement pas les comprendre lorsqu'ils étaient connectés ensemble. De plus, les exemples donnés sur le site officiel sont également très déroutants, ce qui me rend perplexe quant aux scénarios d'utilisation de ces deux API. [Tutoriels associés recommandés : "tutoriel angulaire"]

Description du site officiel

Regardons d'abord la description de ces deux API sur le site officiel :

HostBinding( Lien du site officiel) :

est utilisé pour marquer un attribut DOM comme une propriété liée à l'hôte et fournir des métadonnées de configuration. Angular vérifie automatiquement la liaison de la propriété hôte lors de la détection des modifications, et si la liaison change, il met à jour l'élément hôte où se trouve la directive.

HostListenerLien du site officiel) :

Utilisé pour déclarer l'événement DOM à surveiller et fournir les informations à utiliser lorsque l’événement se produit. Méthode du processeur à exécuter.

Après avoir lu ceci, vous ne savez toujours pas quels sont les scénarios d'utilisation de ces deux frères ? À mon avis, le but de ces deux décorateurs est de nous faciliter l'extraction d'opérations DOM complexes en une seule instruction pour rationaliser le code. Pas de bêtises, lisez simplement le code et vous le comprendrez d’un coup d’œil.

Exemple de code

Supposons qu'il y ait un scénario commercial à ce moment-là, il y a une zone de saisieinput, chaque fois que nous entrez , la couleur des mots et la couleur de la bordure changeront. Nous l'avons nommé "Rainbow Input Box".

Si nous n'utilisons pas l'encapsulation du composant, nous pouvons écrire directement les opérations DOM pertinentes dans le composant. Le code est le suivant :

@Component({
  selector: 'app-rainbow-input-demo',
  template: `
    <h3 id="这是一个彩虹输入框-每输入一次都会改变颜色">这是一个彩虹输入框,每输入一次都会改变颜色</h3>
    <input [class]="&#39;my-input&#39;"
           type="text"
           [style]="inputStyleObj"
           (keydown)="onKeyDown()"
    />
  `,
  styles:[
    `.my-input {
        border:none;
        outline: none;
        border: 2px solid #333333;
        border-radius: 5px;
      }`
  ]
})
export class RainbowInputDemoComponent {
  //默认的颜色样式
  public inputStyleObj = {
    color:null,
    borderColor:null,
  };
  //颜色库
  public possibleColors = [
    &#39;darksalmon&#39;, &#39;hotpink&#39;, &#39;lightskyblue&#39;,
    &#39;goldenrod&#39;, &#39;peachpuff&#39;, &#39;mediumspringgreen&#39;,
    &#39;cornflowerblue&#39;, &#39;blanchedalmond&#39;, &#39;lightslategrey&#39;
  ];
  //键盘落下事件
  onKeyDown(){
    const index = Math.floor(Math.random() * this.possibleColors.length);
    //如果我们直接使用this.inputStyleObj.color = this.possibleColors[index]的话,
    //this.inputStyleObj虽然内容变了,由于它是引用类型,其地址值没有变。所以不会触发视图的重新渲染
    //在angular中,和react似的,我们直接修改引用类型不会触发重新渲染,只能覆盖它或者合并它,使其地址值发生改变,才会触发重新渲染
    //如果觉得麻烦的话,完全可以在模板中使用[style.color]和[style.borderColor]
    this.inputStyleObj = {
      color:this.possibleColors[index],
      borderColor:this.possibleColors[index],
    }
  }
}
Copier après la connexion

L'effet est comme indiqué dans la figure :

Plongez en profondeur dans les décorateurs HostBinding et HostListener dans Angular

Ça y est, nous avons réalisé cette fonction, alors maintenant il y a un problème. Et si nous devons utiliser ceci rainbowInput dans d'autres composants ? Devons-nous copier et coller ces codes à chaque fois que nous les utilisons ? Évidemment, cela n'est pas conforme au principe de l'encapsulation des composants. Si vous faites vraiment cela, le responsable technique ou le chef de projet vous fera également exploser la tête.

Il faut ensuite l'encapsuler dans un composant ou une instruction. Dans cet article, nous l’encapsulons d’abord dans une commande, et nous en reparlerons plus tard. Le code est le suivant :

@Directive({
  selector: &#39;[appRainbow]&#39;
})
export class RainbowInputDirective {
  public possibleColors = [
    &#39;darksalmon&#39;, &#39;hotpink&#39;, &#39;lightskyblue&#39;,
    &#39;goldenrod&#39;, &#39;peachpuff&#39;, &#39;mediumspringgreen&#39;,
    &#39;cornflowerblue&#39;, &#39;blanchedalmond&#39;, &#39;lightslategrey&#39;
  ];
  //字体颜色
  @HostBinding(&#39;style.color&#39;) color: string;
  //边框颜色
  @HostBinding(&#39;style.borderColor&#39;) borderColor: string;
  //监听键盘落下的事件
  @HostListener(&#39;keydown&#39;) onKeyDown() {
    //获取一个随机的颜色
    const index = Math.floor(Math.random() * this.possibleColors.length);
    this.color = this.borderColor = this.possibleColors[index];
  }
}

@Component({
  selector: &#39;app-rainbow-input-demo&#39;,
  template: `
    <h3 id="这是一个彩虹输入框-每输入一次都会改变颜色">这是一个彩虹输入框,每输入一次都会改变颜色</h3>
    <input [class]="&#39;my-input&#39;" type="text" appRainbow />
  `,
  styles:[
   	//省略,和上面相同
  ]
})
export class RainbowInputDemoComponent {}
Copier après la connexion

Tout comme le code ci-dessus, nous avons extrait la logique répétée, ce qui a grandement amélioré la maintenabilité et la beauté du code.

Conclusion

Dans le code, nous pouvons voir que la fonction de @HostBinding est en fait de lier un certain attribut au élément hôte, mais cet attribut n'est pas n'importe quel attribut. Cet attribut fait référence aux attributs pris en charge dans les modèles angulaires. En fait, @HostBinding est équivalent à

ou [] dans le modèle. De la même manière, @HostListener équivaut à bind- ou () dans le modèle. Cela nous permet de lier des attributs et des méthodes à l'élément hôte dans l'instruction. L'effet obtenu est le même que notre première méthode d'écriture de on- et (keydow) directement sur le modèle. Par conséquent, les chaînes de ces deux décorateurs ne peuvent pas être écrites avec désinvolture.

À propos des instructions et des composants

[style]Cependant, en fait, en angulaire, la différence entre les composants et les instructions n'est pas particulièrement grande , car angulaire Le décorateur de composant @Component dans est hérité de @Directive.

En fait, il ne nous est pas impossible d'encapsuler cette opération DOM dans un composant. Le code est le suivant

@Component({
  selector:&#39;input[appRainbow]&#39;
})
Copier après la connexion

Mais ce n'est vraiment pas très différent de la méthode d'écriture des instructions :

@Directive({
  selector: &#39;[appRainbow]&#39;
})
Copier après la connexion

.

Résumé

@HostBinding est équivalent à

ou [] sur le modèle

bind-@HostListener est équivalent ; au modèle Le

ou ();

on- est la liaison des données et de la méthode dans les instructions fournies par Angular afin de nous empêcher d'exploiter directement le DOM.

Pour plus de connaissances sur la programmation, veuillez visiter : Enseignement de la programmation un >! !

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment installer Angular sur Ubuntu 24.04 Comment installer Angular sur Ubuntu 24.04 Mar 23, 2024 pm 12:20 PM

Angular.js est une plateforme JavaScript librement accessible pour créer des applications dynamiques. Il vous permet d'exprimer rapidement et clairement divers aspects de votre application en étendant la syntaxe HTML en tant que langage de modèle. Angular.js fournit une gamme d'outils pour vous aider à écrire, mettre à jour et tester votre code. De plus, il offre de nombreuses fonctionnalités telles que le routage et la gestion des formulaires. Ce guide expliquera comment installer Angular sur Ubuntu24. Tout d’abord, vous devez installer Node.js. Node.js est un environnement d'exécution JavaScript basé sur le moteur ChromeV8 qui vous permet d'exécuter du code JavaScript côté serveur. Être à Ub

Explication détaillée du gestionnaire d'état d'apprentissage angulaire NgRx Explication détaillée du gestionnaire d'état d'apprentissage angulaire NgRx May 25, 2022 am 11:01 AM

Cet article vous donnera une compréhension approfondie du gestionnaire d'état NgRx d'Angular et vous présentera comment utiliser NgRx. J'espère qu'il vous sera utile !

Une brève analyse de la façon d'utiliser monaco-editor en angulaire Une brève analyse de la façon d'utiliser monaco-editor en angulaire Oct 17, 2022 pm 08:04 PM

Comment utiliser monaco-editor en angulaire ? L'article suivant enregistre l'utilisation de monaco-editor dans angulaire qui a été utilisé dans une entreprise récente. J'espère qu'il sera utile à tout le monde !

Un article explorant le rendu côté serveur (SSR) dans Angular Un article explorant le rendu côté serveur (SSR) dans Angular Dec 27, 2022 pm 07:24 PM

Connaissez-vous Angular Universel ? Cela peut aider le site Web à fournir un meilleur support SEO !

Comment utiliser PHP et Angular pour le développement front-end Comment utiliser PHP et Angular pour le développement front-end May 11, 2023 pm 04:04 PM

Avec le développement rapide d'Internet, la technologie de développement front-end s'améliore et se répète constamment. PHP et Angular sont deux technologies largement utilisées dans le développement front-end. PHP est un langage de script côté serveur capable de gérer des tâches telles que le traitement des formulaires, la génération de pages dynamiques et la gestion des autorisations d'accès. Angular est un framework JavaScript qui peut être utilisé pour développer des applications monopage et créer des applications Web composées de composants. Cet article explique comment utiliser PHP et Angular pour le développement front-end et comment les combiner.

Composants angulaires et leurs propriétés d'affichage : comprendre les valeurs par défaut non bloquantes Composants angulaires et leurs propriétés d'affichage : comprendre les valeurs par défaut non bloquantes Mar 15, 2024 pm 04:51 PM

Le comportement d'affichage par défaut des composants du framework Angular ne concerne pas les éléments au niveau du bloc. Ce choix de conception favorise l'encapsulation des styles de composants et encourage les développeurs à définir consciemment la manière dont chaque composant est affiché. En définissant explicitement l'affichage des propriétés CSS, l'affichage des composants angulaires peut être entièrement contrôlé pour obtenir la mise en page et la réactivité souhaitées.

Que dois-je faire si le projet est trop gros ? Comment diviser raisonnablement les projets Angular ? Que dois-je faire si le projet est trop gros ? Comment diviser raisonnablement les projets Angular ? Jul 26, 2022 pm 07:18 PM

Le projet Angular est trop volumineux, comment le diviser raisonnablement ? L'article suivant vous expliquera comment diviser raisonnablement les projets Angular. J'espère qu'il vous sera utile !

Une brève analyse des composants indépendants dans Angular et voir comment les utiliser Une brève analyse des composants indépendants dans Angular et voir comment les utiliser Jun 23, 2022 pm 03:49 PM

Cet article vous présentera les composants indépendants dans Angular, comment créer un composant indépendant dans Angular et comment importer des modules existants dans le composant indépendant. J'espère qu'il vous sera utile !

See all articles