angular 2获取Angular 2中的元素以用于Material design lite
发布时间:2020-12-17 17:39:23 所属栏目:安全 来源:网络整理
导读:我想在Angular 2中使用 Material Design Lite snackbar. 我试图在我的模板中抓住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 /di
我想在Angular 2中使用
Material Design Lite snackbar.
我试图在我的模板中抓住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中使用相同的代码来获取元素.但是,我无法让小吃店工作.以下是更新的代码. 在我的组件文件中 constructor(private el:ElementRef){} ngAfterViewInit(){ var snackbarContainer = this.el.nativeElement.querySelector("#toast_error") var data = { message: 'Button color changed.',actionText: 'Undo' }; console.log(snackbarContainer.MaterialSnackbar); //prints undefined //snackbarContainer.MaterialSnackbar.showSnackbar(data); } console.log()命令打印undefined.我确保加载了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.',actionText: 'Undo' }; snackbarContainer.MaterialSnackbar.showSnackbar(data); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |