我遇到了一个奇怪的情况,这种情况似乎只发生在第一次在一个基于大量组件的页面上加载一个组件时(加载 30 多个组件)。
@Component{
selector: <parent-component>
template: `<child-component [myObject]=myObject>
}
export class ParentComponent {
private myObject:DTOValue;
constructor(service:MyService){
service.getDTOValue().subscribe((dtoValue:DTOValue) => {
this.myObject = dtoValue;
});
}
}
@Component{
selector: <child-component>
template: `<div></div>
}
export class ChildComponent {
@Input set myObject(value:DTOValue) => {//do something};
constructor(){
}
}
在这段代码中,父级将获取一个值作为输入给子级。此值来自稍后的请求,因此当第一次初始化子时,输入可能是未定义的。当值确实从请求中返回并在变量上设置时myObject
,我希望子组件会收到一个被触发的输入事件。但是,由于时间问题,情况似乎并非总是如此,尤其是当我第一次加载一个包含大量正在加载文件的页面时。
在子组件没有收到输入的情况下,如果我单击页面上的其他位置,现在似乎会触发更改检测并获取输入值。
我能想到的两种可能的解决方案需要一些大的代码更改,因此我想确保在实施它们之前立即选择正确的解决方案。
将输入更改为主题,以便我推送输入值,该值应确保触发正确的事件(这似乎有点矫枉过正)。
当请求以正确的值返回时,使用动态加载器加载组件(也似乎有点矫枉过正)。
更新: 添加一个 plnker:http ://plnkr.co/edit/1bUelmPFjwPDjUBDC4vb ,您可以在这里看到标题似乎永远不会应用其数据绑定。
任何建议,将不胜感激。
谢谢!