[英]angular 2 getting hold of an element in Angular 2 for use in Material design lite
我想在Angular 2中使用Material Design Lite小吃欄 。
我嘗試通過以下方式獲取模板中的Element:
我的范本
<test>
<div id="child1"> child1 <div id="child2">
<div id="child2"> child2 <div id="child2">
<div id="toast_error"> Error message </div>
</div>
</div>
</div>
</test>
在我的組件文件中
constructor(private el:ElementRef){}
ngOnInit(){
this.show_error("something");
}
show_error(err){
var snackbarContainer = this.el.nativeElement.querySelector("#toast_error")
var data = {
message: 'Button color changed.',
timeout: 2000,
actionText: 'Undo'
};
snackbarContainer.MaterialSnackbar.showSnackbar(data);
}
我收到以下錯誤消息。 如何獲得ID為toast_error
的元素
EXCEPTION: TypeError: Cannot read property 'MaterialSnackbar' of null in [null]
PS:我已經檢查過this.el.nativeElement
確實給了我正確的參考
根據答案和評論,我現在可以通過在ngAfterViewInit
使用相同的代碼來ngAfterViewInit
。 但是,我無法讓小吃店正常工作。 以下是更新的代碼。
在我的組件文件中
constructor(private el:ElementRef){}
ngAfterViewInit(){
var snackbarContainer = this.el.nativeElement.querySelector("#toast_error")
var data = {
message: 'Button color changed.',
timeout: 2000,
actionText: 'Undo'
};
console.log(snackbarContainer.MaterialSnackbar); //prints undefined
//snackbarContainer.MaterialSnackbar.showSnackbar(data);
}
console.log()
命令顯示未定義。 我已經確保material.min.js已加載並檢查了文件,它確實包含MaterialSnackbar
。 我應該如何調試呢?
我通過將代碼解決了這個問題ngAfterViewInit()
並調用upgradeElement
如下:
constructor(private el:ElementRef){}
ngAfterViewInit(){
window.componentHandler.upgradeAllRegistered();
var snackbarContainer = this.el.nativeElement.querySelector("#toast_error")
var data = {
message: 'Button color changed.',
timeout: 2000,
actionText: 'Undo'
};
snackbarContainer.MaterialSnackbar.showSnackbar(data);
}
您可以使用模板變量和@ViewChild
來獲取特定元素:
<div id="toast_error" #toastError> Error message </div>
@ViewChile('toastError') toastErrorDiv;
ngAfterViewInit() {
toastErrorDiv.doSomething();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.