我试图运行一些DOM操作代码,当一个observable解决,因此ngIf条件因此在视图中解析,但每次我试图访问它时,它都会返回未定义。这里是我的代码的快照:Angular 2 - ngIf可观察使元素无法访问
查看:
<div *ngIf="data?.data_child" id="data-element">
... data here
</div>
控制器:
public data;
constructor(private _async: AsyncService){}
ngOnInit() {
this._async.subscribe(result => {
if(result) {
// data contains data_child
this.data = result;
// run DOM manipulation on the element
if(this.data.data_child) {
// error is thrown here as the element is undefined
$('#data-element').scrollTop($('#data-element')[0].scrollHeight);
}
}
}
}
我想提一提,我曾尝试创建内部ngAfterViewInit另一个订阅,把它那里,但仍,发生同样的错误。
这种工作唯一的事情是当数据加载后发出一个事件,然后我订阅并触发DOM操作方法。但是,它仅在ngOnInit第一次触发时才起作用,因为到该组件的更多路由不再触发事件(没有reuseComponent功能)。
我也尝试使用@ViewChild并设置一个模板变量,然后在控制器中使用,但它仍然抛出相同的错误。
任何想法?谢谢!
您可以使用解析器在模板加载之前获取组件中的所有数据。 –
请您详细说明这个问题,因为我不熟悉它们?在我订阅了用于构建url的activatedRoute参数和queryParameters后,我只能访问我需要获取的数据。在这种情况下,我能够使用解析器吗? –
https://angular.io/docs/ts/latest/api/router/index/Resolve-interface.html google如何使用。但基本上你会做的是把你的请求放在这个类中,在你说你需要在进入组件之前解析解析器的模块中,这样当组件加载数据时就已经存在了。否则,您必须找到解决方法并设置超时时间等。 –