kos*_*sta 5 material-design-lite angular
我想在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>
Run Code Online (Sandbox Code Playgroud)
在我的组件文件中
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);
}
Run Code Online (Sandbox Code Playgroud)
我收到了以下错误消息.如何获取带有id的元素toast_error
EXCEPTION: TypeError: Cannot read property 'MaterialSnackbar' of null in [null]
Run Code Online (Sandbox Code Playgroud)
PS:我已经检查this.el.nativeElement确实给了我正确的参考
根据答案和评论,我现在可以通过使用相同的代码来获取元素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);
}
Run Code Online (Sandbox Code Playgroud)
该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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3649 次 |
| 最近记录: |