2016-08-30 57 views
1

我不明白,在其宗旨子组件在角2Angular 2 - 数据更改后子组件被破坏,为什么?

被破坏掉了下面的话:

我有父母和孩子组成部分:

parent.component.html

<div class="parent-content" (click)="toggleChild()"> 
    // ... 
</div> 
<child></child> 

通过点击儿童将被切换内容(子组件将通过动画显示)

parent.component.ts

在这里,我订阅我的父sharedService数据的变化......

ngOnInit() { 
    let subscription = this.sharedService.myData.subscribe((data) => { 
     this.data = data; 
    }); 
} 

..以及在我的孩子(acually孩子包装器动态创建的组件,因此要准确 - 我用我的盛大的孩子sharedService)

child.component.ts

this.resolver.resolveComponent(component).then(factory => { 
    let componentRef = this.childContainer.createComponent(factory); 
}); 

盛大child.component.ts

ngOnInit() { 
    let subscription = this.sharedService.myData.subscribe((data) => { 
     this.data = data; 
    }); 
} 

现在,当myData的变化(由于服务器响应)的孩子被破坏了! 我失去了所有的大孩子的数据,因为它也被摧毁了!

我读到有关组件交互here,但还是无法弄清楚究竟何时会ngOnDestroy叫,因为我没有任何@Inputs做...

也许我可以存储盛大孩子操纵数据在其他地方被破坏之前,但重点是,我需要此视图保持开放获取myData更新为父母和孙子。谢谢你的帮助!

UPDATE

我发现它其实并不重要,孩子(大独生子女)数据,但造成破坏父数据的纯粹的变化(或重新初始化,因为在子组件之后再次调用子构造函数)。这个问题如何解决?

+1

'* ngIf','* ngFor',路线变化 –

+0

那么这个问题的正确方法是什么?请看看上面的更新。 – mrpool89

+0

对不起,没有足够的信息来查看正在发生的事情。我看到你动态地创建组件,但是从你的问题中的代码,我不可能看到事物是如何连接的。 –

回答

2

事实证明,@GünterZöchbauer是正确的。我的孩子组件内的*ngFor在我的父母模板的顶部取决于myData。当然,*ngFor在改变之后得到了重新渲染,我的孩子组件也如此。我通过将子组件从循环中拉出并将它们单独放置到应用程序中,同时仍然从较高级别的组件动态加载它们来重建视图。由于他们依赖sharedService,他们仍能正确获取数据并在更改后保持打开状态。谢谢!