So verwenden Sie die ElementRef-Anwendung in Angular4
Dieser Artikel stellt hauptsächlich die Anwendung von Angular4 ElementRef vor. Jetzt teile ich ihn mit Ihnen und gebe ihn als Referenz.
Angulars Slogan lautet: „Ein Framework, mehrere Plattformen. Sowohl für Mobiltelefone als auch für Desktops geeignet (Ein Framework.Mobile & Desktop.)“, das heißt, Angular unterstützt die Entwicklung plattformübergreifender Anwendungen. wie zum Beispiel: Webanwendungen, mobile Webanwendungen, native mobile Anwendungen und native Desktopanwendungen usw.
Um plattformübergreifend zu unterstützen, kapselt Angular die Unterschiede verschiedener Plattformen durch eine Abstraktionsschicht und vereinheitlicht die API-Schnittstelle. Beispielsweise sind die abstrakte Klasse Renderer, die abstrakte Klasse RootRenderer usw. definiert. Darüber hinaus sind folgende Referenztypen definiert: ElementRef, TemplateRef, ViewRef, ComponentRef, ViewContainerRef usw. Lassen Sie uns die ElementRef-Klasse analysieren:
Die Rolle von ElementRef
Der direkte Betrieb des DOM in der Anwendungsschicht führt zu einer Lücke zwischen der Anwendungsschicht und dem Rendering Die starke Kopplung der Schicht verhindert, dass unsere Anwendungen in verschiedenen Umgebungen ausgeführt werden, z. B. in Web-Worker-Umgebungen, da das DOM in der Web-Worker-Umgebung nicht direkt manipuliert werden kann. Interessierte Leser können die in Web Workers unterstützten Klassen und Methoden lesen. Über ElementRef können wir native Elemente in der Ansichtsebene unter verschiedenen Plattformen kapseln (in einer Browserumgebung beziehen sich native Elemente normalerweise auf DOM-Elemente). Mithilfe der leistungsstarken Abhängigkeitsinjektionsfunktion von Angular können wir schließlich problemlos auf native Elemente zugreifen Elemente.
Definition von ElementRef
export class ElementRef { public nativeElement: any; constructor(nativeElement: any) { this.nativeElement = nativeElement; } }
Anwendung von ElementRef
Lassen Sie uns zunächst die allgemeinen Anforderungen vorstellen. Wir möchten das p-Element auf der Seite abrufen und die Hintergrundfarbe des p-Elements ändern, nachdem die Seite erfolgreich gerendert wurde. Als nächstes werden wir diese Anforderung Schritt für Schritt umsetzen.
Zuerst müssen wir das p-Element abrufen. Im Abschnitt „Rolle von ElementRef“ des Artikels haben wir erwähnt, dass wir die leistungsstarke Abhängigkeitsinjektionsfunktion von Angular verwenden können, um das gekapselte native Element zu erhalten Element. Im Browser ist das native Element das DOM-Element. Wir müssen nur zuerst das my-app-Element abrufen und dann die querySelector-API verwenden, um das p-Element auf der Seite abzurufen. Der spezifische Code lautet wie folgt:
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); } }
Beim Ausführen des obigen Codes tritt keine Ausnahme in der Konsole auf, aber das Ausgabeergebnis ist null . Was ist los? Es wird keine Ausnahme ausgelöst. Wir können daraus schließen, dass das Objekt this.elementRef.nativeElement existiert, seine untergeordneten Elemente jedoch nicht gefunden werden können. Dies sollte daran liegen, dass die untergeordneten Elemente unter dem my-app-Element noch nicht erstellt wurden, als der Konstruktor aufgerufen wurde. Wie kann man dieses Problem lösen? Ich denke... Gibt es da nicht setTimeout? Wir überarbeiten es ein wenig:
constructor(private elementRef: ElementRef) { setTimeout(() => { // 此处需要使用箭头函数哈,你懂的... let pEle = this.elementRef.nativeElement.querySelector('p'); console.dir(pEle); }, 0); }
Das Problem ist gelöst, aber es fühlt sich nicht an sehr elegant? Gibt es eine bessere Lösung? Die Antwort ist ja. Angular bietet keine Hooks für den Komponentenlebenszyklus. Wir können einen geeigneten Zeitpunkt auswählen und das gewünschte p-Element erhalten.
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'; } }
Führen Sie den obigen Code aus und wir sehen das erwartete p-Element. Wir verwenden direkt den ngAfterViewInit-Hook. Fragen Sie mich nicht warum, denn er ist für das Auge am angenehmsten. Allerdings werden wir später auch einen speziellen Artikel veröffentlichen, in dem wir den Lebenszyklus von Angular-Komponenten im Detail analysieren. Nachdem Sie das p-Element erfolgreich erhalten haben, ist der Rest einfach. Legen Sie die Hintergrundfarbe des Elements direkt über das Stilobjekt fest.
Obwohl die Funktion implementiert wurde, gibt es noch Raum für Optimierungen?
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'; } }
Haben Sie das Gefühl, dass es Ihnen sofort besser geht? Gibt es Raum für eine weitere Optimierung des oben genannten Codes? Wir sehen, dass der Hintergrund des p-Elements festgelegt ist und wir die Standardumgebung für die Ausführung von Anwendungen im Browser sind. Wie bereits erwähnt, müssen wir die starke Kopplungsbeziehung zwischen der Anwendungsschicht und der Rendering-Schicht minimieren, damit unsere Anwendung flexibel in verschiedenen Umgebungen ausgeführt werden kann. Werfen wir abschließend einen Blick auf den endgültigen optimierten Code:
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 Welche anderen häufig verwendeten Methoden gibt es in der Renderer-API?
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; }
Es ist zu beachten, dass wir in der Angular 4.x+-Version Renderer2 anstelle von Renderer (Angular V2) verwenden.
2. Welche anderen häufig verwendeten Methoden gibt es in der Renderer2-API?
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; }
Das oben Gesagte habe ich für Sie zusammengestellt. Ich hoffe, es wird Ihnen in Zukunft hilfreich sein.
Verwandte Artikel:
Probleme bei der Routing-Berechtigungsverwaltung mit Vue (ausführliches Tutorial)
Das obige ist der detaillierte Inhalt vonSo verwenden Sie die ElementRef-Anwendung in Angular4. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Sie haben etwas Wichtiges von Ihrem Startbildschirm gelöscht und versuchen, es wiederherzustellen? Es gibt verschiedene Möglichkeiten, App-Symbole wieder auf dem Bildschirm anzuzeigen. Wir haben alle Methoden besprochen, die Sie anwenden können, um das App-Symbol wieder auf dem Startbildschirm anzuzeigen. So machen Sie das Entfernen vom Startbildschirm auf dem iPhone rückgängig. Wie bereits erwähnt, gibt es mehrere Möglichkeiten, diese Änderung auf dem iPhone wiederherzustellen. Methode 1 – App-Symbol in der App-Bibliothek ersetzen Sie können ein App-Symbol direkt aus der App-Bibliothek auf Ihrem Startbildschirm platzieren. Schritt 1 – Wischen Sie seitwärts, um alle Apps in der App-Bibliothek zu finden. Schritt 2 – Suchen Sie das App-Symbol, das Sie zuvor gelöscht haben. Schritt 3 – Ziehen Sie einfach das App-Symbol aus der Hauptbibliothek an die richtige Stelle auf dem Startbildschirm. Dies ist das Anwendungsdiagramm

Die Rolle und praktische Anwendung von Pfeilsymbolen in PHP In PHP wird das Pfeilsymbol (->) normalerweise verwendet, um auf die Eigenschaften und Methoden von Objekten zuzugreifen. Objekte sind eines der Grundkonzepte der objektorientierten Programmierung (OOP) in PHP. In der tatsächlichen Entwicklung spielen Pfeilsymbole eine wichtige Rolle bei der Bedienung von Objekten. In diesem Artikel werden die Rolle und die praktische Anwendung von Pfeilsymbolen vorgestellt und spezifische Codebeispiele bereitgestellt, um den Lesern ein besseres Verständnis zu erleichtern. 1. Die Rolle des Pfeilsymbols für den Zugriff auf die Eigenschaften eines Objekts. Das Pfeilsymbol kann für den Zugriff auf die Eigenschaften eines Objekts verwendet werden. Wenn wir ein Paar instanziieren

Der Linuxtee-Befehl ist ein sehr nützliches Befehlszeilentool, das Ausgaben in eine Datei schreiben oder an einen anderen Befehl senden kann, ohne die vorhandene Ausgabe zu beeinträchtigen. In diesem Artikel werden wir die verschiedenen Anwendungsszenarien des Linuxtee-Befehls eingehend untersuchen, vom Anfänger bis zum Experten. 1. Grundlegende Verwendung Werfen wir zunächst einen Blick auf die grundlegende Verwendung des Tee-Befehls. Die Syntax des Tee-Befehls lautet wie folgt: tee[OPTION]...[DATEI]...Dieser Befehl liest Daten aus der Standardeingabe und speichert sie dort

Die Go-Sprache ist eine Open-Source-Programmiersprache, die von Google entwickelt und erstmals 2007 veröffentlicht wurde. Sie ist als einfache, leicht zu erlernende, effiziente Sprache mit hoher Parallelität konzipiert und wird von immer mehr Entwicklern bevorzugt. In diesem Artikel werden die Vorteile der Go-Sprache untersucht, einige für die Go-Sprache geeignete Anwendungsszenarien vorgestellt und spezifische Codebeispiele gegeben. Vorteile: Starke Parallelität: Die Go-Sprache verfügt über eine integrierte Unterstützung für leichtgewichtige Threads-Goroutinen, mit denen die gleichzeitige Programmierung problemlos implementiert werden kann. Goroutine kann mit dem Schlüsselwort go gestartet werden

Die breite Anwendung von Linux im Bereich Cloud Computing Mit der kontinuierlichen Weiterentwicklung und Popularisierung der Cloud-Computing-Technologie spielt Linux als Open-Source-Betriebssystem eine wichtige Rolle im Bereich Cloud Computing. Aufgrund seiner Stabilität, Sicherheit und Flexibilität werden Linux-Systeme häufig in verschiedenen Cloud-Computing-Plattformen und -Diensten eingesetzt und bieten eine solide Grundlage für die Entwicklung der Cloud-Computing-Technologie. In diesem Artikel werden die vielfältigen Einsatzmöglichkeiten von Linux im Bereich Cloud Computing vorgestellt und konkrete Codebeispiele gegeben. 1. Anwendungsvirtualisierungstechnologie von Linux in der Virtualisierungstechnologie der Cloud-Computing-Plattform

Der MySQL-Zeitstempel ist ein sehr wichtiger Datentyp, der Datum, Uhrzeit oder Datum plus Uhrzeit speichern kann. Im eigentlichen Entwicklungsprozess kann die rationelle Verwendung von Zeitstempeln die Effizienz von Datenbankoperationen verbessern und zeitbezogene Abfragen und Berechnungen erleichtern. In diesem Artikel werden die Funktionen, Features und Anwendungsszenarien von MySQL-Zeitstempeln erläutert und anhand spezifischer Codebeispiele erläutert. 1. Funktionen und Eigenschaften von MySQL-Zeitstempeln In MySQL gibt es zwei Arten von Zeitstempeln, einer ist TIMESTAMP

1. Zuerst klicken wir auf den kleinen weißen Punkt. 2. Klicken Sie auf das Gerät. 3. Klicken Sie auf Mehr. 4. Klicken Sie auf Anwendungsumschalter. 5. Schließen Sie den Anwendungshintergrund.

In Golang ist Makro (Makro) eine fortschrittliche Programmiertechnologie, die Programmierern dabei helfen kann, die Codestruktur zu vereinfachen und die Wartbarkeit des Codes zu verbessern. Makros sind ein Textersetzungsmechanismus auf Quellcodeebene, der während der Kompilierung Makrocodeausschnitte durch tatsächliche Codeausschnitte ersetzt. In diesem Artikel werden wir das Konzept und die Anwendung von Makros in Golang untersuchen und spezifische Codebeispiele bereitstellen. 1. Das Konzept von Makros In Golang sind Makros keine nativ unterstützte Funktion, da die ursprüngliche Designabsicht von Golang darin besteht, die Sprache einfach und klar zu halten.
