2017-03-09 39 views
2

检查后,我有过相同的模型数据,但在自定义管道过滤两个制表成分表达发生了变化:角2:它是在访问子组件属性

<md-tab-group> 
    <md-tab label="All ({{ allPeople.count }})"> 
     <tab-content #allPeople [content]="data"></tab-content> 
    </md-tab> 

    <md-tab label="Tennagers ({{ teenagers.count }})"> 
     <tab-content #teenagers [content]="data | filterByAge: 20"></tab-content> 
    </md-tab> 
</md-tab-group> 

在父组件,我想要访问一个孩子的财产。正如你看到的,我这样做,与ID连接:{{ allPeople.count }}

在子组件,我有ngOnChanges()方法做了一些计算和返回count属性:

ngOnChanges() { 
    this.count = this.countPeople(); 
} 

通过这种方法,它的工作原理,但出现以下控制台错误:

表达式在检查后发生了变化。先前值:'全部 (0)'。当前值:'全部(4)'。

我知道它只出现在开发模式中,但我也知道这不是一个好的做法。当我有同样的变化时,是否有另一种方式可以访问子女财产count

这里是一个工作示例:https://plnkr.co/edit/YlKxh81ejJF7zofc4310?p=preview

回答

1

你得到这个错误,当变化检测导致的变化模式。因为ngOnChanges()被更改检测调用,所以这可能是您的情况中导致错误的原因。您可以在更新后明确调用更改检测。

constructor(private cdRef:ChangeDetectorRef) {} 

ngOnChanges() { 
    setTimeout(() => this.count = this.countPeople()); 
    // this.cdRef.detectChanges(); 
} 

我不知道为什么detectChanges()没有工作你的情况,但没有setTimeout()。我认为这取决于变化与其他组件有关。 detectChanges仅适用于当前组件。

+0

谢谢你的回答:)这个解决方案是一个好的做法,有没有更好的方法如何做到这一点?也许有一个原因,为什么这个错误出现:) –

+0

我还没有看到更好的东西呢。尽量避免在'ngOnChanges'中改变模型,但通常没有好的选择。 –

+0

不幸的是,它不能解决这个错误。这是与您的解决方案更新plunker:https://plnkr.co/edit/YlKxh81ejJF7zofc4310?p=preview –