Angular2+Typescript: как управлять элементом DOM?
обновление в 2017 году: ViewChild будет лучшим способом доступа к элементу Dom.
вопрос размещен в 2016 году:
Я пробовал следующие два метода, работает только метод 2. Но мне не нужен повторяющийся код: document.метод getElementById() в каждом методе. Я предпочитаю метод 1, но почему метод 1 не работает?
есть ли лучшие способы манипулировать DOM в Angular2?
.HTML-файл:
<video id="movie" width="480px" autoplay>
<source src="img/movie.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
способ 1:
...
class AppComponent {
videoElement = document.getElementById("movie");
playVideo() {
this.videoElement.play();
}
}
Способ 2:
...
class AppComponent {
playVideo() {
var videoElement = document.getElementById("movie");
videoElement.play();
}
}
2 ответов
<div #itemId>{{ (items()) }}</div>
вы можете получить доступ к элементу через ViewChild:
import {ViewChild} from '@angular/core';
@ViewChild('itemId') itemId;
ngAfterViewInit() {
console.log(this.itemId.nativeElement.value);
}
в соответствии с вашим вопросом вы хотите использовать некоторую общую часть кода в нескольких методах. но вы потерпели неудачу. просто объявите одну переменную и назначьте некоторые значения этой переменной, тогда вы сможете использовать эту переменную в нескольких методах, как это, или мы можем сказать, связать это значение переменной с двухсторонней привязкой данных angular using [(ngModel)]
:
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>
здесь работает демо для того же http://plnkr.co/edit/Y80SsPCUTx1UP5tYksIy?p=preview