2016-03-04 5 views
6

Update in 2017: ViewChild wird der beste Weg, um Dom-Element zugreifen.Angular2 + Typescript: Wie manipuliert man das DOM-Element?

Frage im Jahr 2016 veröffentlicht:

ich die folgenden zwei Methoden versucht haben, nur Methode 2 funktioniert. Aber ich möchte nicht den wiederholten Code: document.getElementById() in jeder Methode. Ich bevorzuge Methode 1, aber warum Methode 1 nicht funktioniert?

Gibt es bessere Möglichkeiten, DOM in Angular2 zu manipulieren?

Html-Datei:

<video id="movie" width="480px" autoplay> 
    <source src="img/movie.mp4" type="video/mp4"> 
    Your browser does not support the video tag. 
</video> 

Methode 1:

... 
class AppComponent { 
    videoElement = document.getElementById("movie"); 

    playVideo() { 
     this.videoElement.play(); 
    } 
} 

Methode 2:

... 
class AppComponent { 

    playVideo() { 
     var videoElement = document.getElementById("movie"); 
     videoElement.play(); 
    } 
} 
+0

, was Sie wollen ein sk? poste etwas mehr Code oder Plunkr wenn möglich. scheint die beiden Methoden, die Sie gepostet haben, das gleiche, oder? –

+0

Ich weiß, dass es für Variablen gleich aussieht, aber tatsächlich gibt es für das DOM-Element einen Unterschied zwischen der Deklaration einer DOM-Elementvariablen innerhalb der Methode und der externen Methode. Es scheint sehr seltsam, aber ich bekomme diese Schlussfolgerung, nachdem die erste Methode fehlgeschlagen ist. –

+0

Was sind die Schlussfolgerungen, die Sie bekommen haben? Gibt es einen großen Unterschied zwischen diesen beiden? Wenn ja, bitte als Antwort für andere hilfreich sein. –

Antwort

9
<div #itemId>{{ (items()) }}</div> 

Sie das Element über ViewChild zugreifen:

import {ViewChild} from '@angular/core'; 

    @ViewChild('itemId') itemId; 

    ngAfterViewInit() { 
     console.log(this.itemId.nativeElement.value); 
    } 
0

Nach Ihrer Frage mögen Sie einigen gemeinsamen Teil des Codes in mehr verwenden Methoden. aber du hast keinen Erfolg. nur eine einzige Variable deklarieren und einige Werte dieser Variablen zugewiesen, dann werden Sie in der Lage sein, diese Variable in mehrere Methoden wie diese verwenden oder können wir binden diese Variable Wert mit Zweiweg-Datenbindung von Winkel mit [(ngModel)] sagen:

class A { 
     abc:string = null; 
     abc2:string = null; 

     abcFun(){ 
     console.log(this.abc) 
     } 

     bcdFun(){ 
     console.log(this.abc) 
     } 

     // second method using javascript as your way 
      abcFun2(){ 
      this.abc2 = document.getElementById('abc2').value; 
      console.log(this.abc2); 
      } 
      bcdFun2(){ 
      console.log(this.abc2); 
      } 
    } 

<input type="text" id="abc" [(ngModel)]="abc"> {{abc}} 

<button (click)="abcFun()">ABC FUN</button> 
<button (click)="bcdFun()">BCD FUN</button> 


<input type="text" id="abc2"> {{abc2}} 

<button (click)="abcFun2()">ABC FUN</button> 
<button (click)="bcdFun2()">BCD FUN</button> 

hier arbeitet Demo für den gleichen http://plnkr.co/edit/Y80SsPCUTx1UP5tYksIy?p=preview

+0

Ich habe Ihren Code oben versucht, es funktioniert auch nicht. Hast du es jemals getestet? –

+0

sehen Sie bitte die Arbeitsdemo, die an Link angeschlossen ist. Sie können auch eine Zwei-Wege-Datenbindung verwenden. –

+0

Danke für Ihre Hilfe. Sorry, ich hatte Probleme beim Erstellen einer angular2-Anwendung auf Plunker und kann den Code auf Plunker nicht bearbeiten. Aber ich habe den obigen Code aktualisiert. Du hast meine Frage missverstanden. Meine Frage dreht sich alles um das DOM durch document.getElementById() zu manipulieren. Weil ich Video abspielen/pausieren möchte, muss ich das Element holen. Die Sache ist, wenn ich die videoElement-Variable außerhalb der Methoden definiert, unterscheidet sie sich von der definierten internen Methode. Die erste Methode erhält einen Fehler, wir können nicht auf das DOM-Element zugreifen, wenn es außerhalb der Methode definiert ist. Können Sie mir das Recht geben, Ihren Plünderer zu bearbeiten? –