Comment utiliser l'application ElementRef dans Angular4
Cet article présente principalement l'application d'Angular4 ElementRef. Maintenant, je le partage avec vous et le donne comme référence.
Le slogan d'Angular est - "Un framework, plusieurs plates-formes. Convient à la fois aux téléphones mobiles et aux ordinateurs de bureau (One framework.Mobile & desktop.)", c'est-à-dire qu'Angular prend en charge le développement d'applications multiplateformes, tels que : les applications Web, les applications Web mobiles, les applications mobiles natives et les applications de bureau natives, etc.
Afin de prendre en charge plusieurs plates-formes, Angular encapsule les différences des différentes plates-formes via une couche d'abstraction et unifie l'interface API. Par exemple, la classe abstraite Renderer, la classe abstraite RootRenderer, etc. sont définies. De plus, les types de référence suivants sont définis : ElementRef, TemplateRef, ViewRef, ComponentRef, ViewContainerRef, etc. Analysons la classe ElementRef :
Le rôle d'ElementRef
Faire fonctionner directement le DOM dans la couche application provoquera un écart entre la couche application et le rendu Layer Un couplage fort empêche nos applications de s'exécuter dans différents environnements, tels que les Web Workers, car dans l'environnement des Web Workers, le DOM ne peut pas être directement manipulé. Les lecteurs intéressés peuvent lire les classes et méthodes prises en charge dans Web Workers. Grâce à ElementRef, nous pouvons encapsuler des éléments natifs dans la couche de vue sous différentes plates-formes (dans un environnement de navigateur, les éléments natifs font généralement référence à des éléments DOM). Enfin, avec l'aide de la puissante fonctionnalité d'injection de dépendances fournie par Angular, nous pouvons facilement accéder aux éléments natifs. éléments.
Définition d'ElementRef
export class ElementRef { public nativeElement: any; constructor(nativeElement: any) { this.nativeElement = nativeElement; } }
Application d'ElementRef
Présentons-le d'abord Le L'exigence globale est qu'une fois la page rendue avec succès, nous souhaitons obtenir l'élément p dans la page et changer la couleur d'arrière-plan de l'élément p. Ensuite, nous mettrons en œuvre cette exigence étape par étape.
Nous devons d'abord obtenir l'élément p. Dans la section "Rôle d'ElementRef" de l'article, nous avons mentionné que nous pouvons utiliser la puissante fonctionnalité d'injection de dépendances fournie par Angular pour obtenir le natif encapsulé. élément. Dans le navigateur, l'élément natif est l'élément DOM. Il nous suffit d'abord d'obtenir l'élément my-app, puis d'utiliser l'API querySelector pour obtenir l'élément p dans la page. Le code spécifique est le suivant :
import { Component, ElementRef } from '@angular/core'; @Component({ selector: 'my-app', template: ` <h1>Welcome to Angular World</h1> <p>Hello {{ name }}</p> `, }) export class AppComponent { name: string = 'Semlinker'; constructor(private elementRef: ElementRef) { let pEle = this.elementRef.nativeElement.querySelector('p'); console.dir(pEle); } }
Lors de l'exécution du code ci-dessus, aucune exception ne se produit dans la console, mais le résultat de sortie est null . Que se passe-t-il? Aucune exception n'est levée. Nous pouvons déduire que l'objet this.elementRef.nativeElement existe, mais ses éléments enfants ne peuvent pas être trouvés, car les éléments enfants sous l'élément my-app n'ont pas encore été créés lorsque le constructeur est appelé. Alors comment résoudre ce problème ? Je réfléchis... N'y a-t-il pas setTimeout ? Nous le rénovons un peu :
constructor(private elementRef: ElementRef) { setTimeout(() => { // 此处需要使用箭头函数哈,你懂的... let pEle = this.elementRef.nativeElement.querySelector('p'); console.dir(pEle); }, 0); }
Le problème est résolu, mais ce n'est pas le cas. Vous ne vous sentez pas très élégant ? Existe-t-il une meilleure solution ? La réponse est oui. Angular ne fournit pas de hooks pour le cycle de vie des composants. Nous pouvons choisir un moment approprié et obtenir l'élément p souhaité.
import { Component, ElementRef, AfterViewInit } from '@angular/core'; @Component({ selector: 'my-app', template: ` <h1>Welcome to Angular World</h1> <p>Hello {{ name }}</p> `, }) export class AppComponent { name: string = 'Semlinker'; // 在构造函数中 this.elementRef = elementRef 是可选的,编译时会自动赋值 // function AppComponent(elementRef) { this.elementRef = elementRef; } constructor(private elementRef: ElementRef) { } ngAfterViewInit() { // 模板中的元素已创建完成 console.dir(this.elementRef.nativeElement.querySelector('p')); // let greetp: HTMLElement = this.elementRef.nativeElement.querySelector('p'); // greetp.style.backgroundColor = 'red'; } }
En exécutant le code ci-dessus, nous voyons l'élément p attendu. Nous utilisons directement le hook ngAfterViewInit. Ne me demandez pas pourquoi, car c'est le plus agréable à l'œil. Cependant, nous aurons également un article spécial plus tard pour analyser en détail le cycle de vie des composants Angular. Après avoir obtenu avec succès l'élément p, le reste est simple. Définissez la couleur d'arrière-plan de l'élément directement via l'objet de style.
Bien que la fonction ait été implémentée, y a-t-il encore place à l'optimisation ?
import { Component, ElementRef, ViewChild, AfterViewInit } from '@angular/core'; @Component({ selector: 'my-app', template: ` <h1>Welcome to Angular World</h1> <p #greet>Hello {{ name }}</p> `, }) export class AppComponent { name: string = 'Semlinker'; @ViewChild('greet') greetp: ElementRef; ngAfterViewInit() { this.greetp.nativeElement.style.backgroundColor = 'red'; } }
Avez-vous l'impression de vous améliorer instantanément Mais attendez, y a-t-il de la place pour une optimisation supplémentaire du code ci-dessus ? Nous voyons que l'arrière-plan de l'élément p est défini et nous sommes l'environnement d'exécution d'application par défaut dans le navigateur. Comme mentionné précédemment, nous devons minimiser la forte relation de couplage entre la couche application et la couche de rendu, afin que notre application puisse s'exécuter de manière flexible dans différents environnements. Enfin, jetons un coup d'œil au code optimisé final :
import { Component, ElementRef, ViewChild, AfterViewInit, Renderer } from '@angular/core'; @Component({ selector: 'my-app', template: ` <h1>Welcome to Angular World</h1> <p #greet>Hello {{ name }}</p> `, }) export class AppComponent { name: string = 'Semlinker'; @ViewChild('greet') greetp: ElementRef; constructor(private elementRef: ElementRef, private renderer: Renderer) { } ngAfterViewInit() { // this.greetp.nativeElement.style.backgroundColor = 'red'; this.renderer.setElementStyle(this.greetp.nativeElement, 'backgroundColor', 'red'); } }
1 Quelles autres méthodes couramment utilisées existe-t-il dans l'API de rendu ?
export abstract class Renderer { // 创建元素 abstract createElement(parentElement: any, name: string, debugInfo?: RenderDebugInfo): any; // 创建文本元素 abstract createText(parentElement: any, value: string, debugInfo?: RenderDebugInfo): any; // 设置文本 abstract setText(renderNode: any, text: string): void; // 设置元素Property abstract setElementProperty(renderElement: any, propertyName: string, propertyValue: any): void; // 设置元素Attribute abstract setElementAttribute(renderElement: any, attributeName: string, attributeValue: string): void; // 设置元素的Class abstract setElementClass(renderElement: any, className: string, isAdd: boolean): void; // 设置元素的样式 abstract setElementStyle(renderElement: any, styleName: string, styleValue: string): void; }
Il est à noter que dans la version Angular 4.x+, nous utilisons Renderer2 à la place de Renderer (Angular V2).
2. Quelles autres méthodes couramment utilisées existe-t-il dans l'API Renderer2 ?
export abstract class Renderer2 { abstract createElement(name: string, namespace?: string|null): any; abstract createComment(value: string): any; abstract createText(value: string): any; abstract setAttribute(el: any, name: string, value: string, namespace?: string|null): void; abstract removeAttribute(el: any, name: string, namespace?: string|null): void; abstract addClass(el: any, name: string): void; abstract removeClass(el: any, name: string): void; abstract setStyle(el: any, style: string, value: any, flags?: RendererStyleFlags2): void; abstract removeStyle(el: any, style: string, flags?: RendererStyleFlags2): void; abstract setProperty(el: any, name: string, value: any): void; abstract setValue(node: any, value: string): void; abstract listen( target: 'window'|'document'|'body'|any, eventName: string, callback: (event: any) => boolean | void): () => void; }
Ce qui précède est ce que j'ai compilé pour vous. J'espère qu'il vous sera utile à l'avenir.
Articles associés :
Problèmes de gestion des autorisations de routage à l'aide de Vue (tutoriel détaillé)
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Vous avez supprimé quelque chose d'important de votre écran d'accueil et vous essayez de le récupérer ? Vous pouvez remettre les icônes d’applications à l’écran de différentes manières. Nous avons discuté de toutes les méthodes que vous pouvez suivre et remettre l'icône de l'application sur l'écran d'accueil. Comment annuler la suppression de l'écran d'accueil sur iPhone Comme nous l'avons mentionné précédemment, il existe plusieurs façons de restaurer cette modification sur iPhone. Méthode 1 – Remplacer l'icône de l'application dans la bibliothèque d'applications Vous pouvez placer une icône d'application sur votre écran d'accueil directement à partir de la bibliothèque d'applications. Étape 1 – Faites glisser votre doigt sur le côté pour trouver toutes les applications de la bibliothèque d'applications. Étape 2 – Recherchez l'icône de l'application que vous avez supprimée précédemment. Étape 3 – Faites simplement glisser l'icône de l'application de la bibliothèque principale vers le bon emplacement sur l'écran d'accueil. Voici le schéma d'application

Le rôle et l'application pratique des symboles fléchés en PHP En PHP, le symbole fléché (->) est généralement utilisé pour accéder aux propriétés et méthodes des objets. Les objets sont l'un des concepts de base de la programmation orientée objet (POO) en PHP. Dans le développement actuel, les symboles fléchés jouent un rôle important dans le fonctionnement des objets. Cet article présentera le rôle et l'application pratique des symboles fléchés et fournira des exemples de code spécifiques pour aider les lecteurs à mieux comprendre. 1. Le rôle du symbole flèche pour accéder aux propriétés d'un objet. Le symbole flèche peut être utilisé pour accéder aux propriétés d'un objet. Quand on instancie une paire

La commande Linuxtee est un outil de ligne de commande très utile qui peut écrire la sortie dans un fichier ou envoyer la sortie à une autre commande sans affecter la sortie existante. Dans cet article, nous explorerons en profondeur les différents scénarios d'application de la commande Linuxtee, du débutant au compétent. 1. Utilisation de base Tout d'abord, jetons un coup d'œil à l'utilisation de base de la commande tee. La syntaxe de la commande tee est la suivante : tee[OPTION]...[FILE]...Cette commande lira les données de l'entrée standard et enregistrera les données dans

Le langage Go est un langage de programmation open source développé par Google et lancé pour la première fois en 2007. Il est conçu pour être un langage simple, facile à apprendre, efficace et hautement simultané, et est favorisé par de plus en plus de développeurs. Cet article explorera les avantages du langage Go, présentera quelques scénarios d'application adaptés au langage Go et donnera des exemples de code spécifiques. Avantages : Forte concurrence : le langage Go prend en charge de manière intégrée les threads-goroutine légers, qui peuvent facilement implémenter une programmation simultanée. Goroutin peut être démarré en utilisant le mot-clé go

La large application de Linux dans le domaine du cloud computing Avec le développement et la vulgarisation continus de la technologie du cloud computing, Linux, en tant que système d'exploitation open source, joue un rôle important dans le domaine du cloud computing. En raison de leur stabilité, de leur sécurité et de leur flexibilité, les systèmes Linux sont largement utilisés dans diverses plates-formes et services de cloud computing, fournissant une base solide pour le développement de la technologie du cloud computing. Cet article présentera le large éventail d'applications de Linux dans le domaine du cloud computing et donnera des exemples de code spécifiques. 1. Technologie de virtualisation d'applications de Linux dans la plate-forme de cloud computing Technologie de virtualisation

L'horodatage MySQL est un type de données très important, qui peut stocker la date, l'heure ou la date plus l'heure. Dans le processus de développement actuel, l'utilisation rationnelle des horodatages peut améliorer l'efficacité des opérations de base de données et faciliter les requêtes et les calculs liés au temps. Cet article abordera les fonctions, les fonctionnalités et les scénarios d'application des horodatages MySQL, et les expliquera avec des exemples de code spécifiques. 1. Fonctions et caractéristiques des horodatages MySQL Il existe deux types d'horodatages dans MySQL, l'un est TIMESTAMP

1. Nous cliquons d’abord sur le petit point blanc. 2. Cliquez sur l'appareil. 3. Cliquez sur Plus. 4. Cliquez sur Sélecteur d'applications. 5. Fermez l'arrière-plan de l'application.

Dans Golang, la macro (Macro) est une technologie de programmation avancée qui peut aider les programmeurs à simplifier la structure du code et à améliorer la maintenabilité du code. Les macros sont un mécanisme de remplacement de texte au niveau du code source qui remplace les extraits de code de macro par des extraits de code réels lors de la compilation. Dans cet article, nous explorerons le concept et l'application des macros dans Golang et fournirons des exemples de code spécifiques. 1. Le concept de macros Dans Golang, les macros ne sont pas une fonctionnalité prise en charge nativement car l'intention de conception originale de Golang est de garder le langage simple et clair.
