据我所知,如果输入属性更改(也有其他方式),则更改检测将触发OnPush标记的组件。角2更改检测:OnPush
但我没有在我的子组件输入属性,我有一个服务注入到我的组件。我订阅了这个子组件中服务所暴露的observable。现在在订阅回调方法中,我更改了我的子组件的私有属性值中的一个。该组件的模板与此属性绑定。
所以问题是当观察者发布一个事件时,我的订阅者回调被调用,并且它改变了属性值,但是这个视图并不反映这些改变。用户界面只在我点击页面某处时更新。
changeDetection: ChangeDetectionStrategy.OnPush
更新1:Plunker添加
你试过使用异步管道或'cdRef.markForCheck()'?你的代码在哪里? – yurzui
我无法使用异步管道,因为我的模板绑定到组件示例字符串的私有属性。和CDR.markForCheck()我读过,但不是一个矫枉过正,因为它会通过发射CD回到anscetor根组件?我不知道如何发布一个重要的,将谷歌和不久之后添加。谢谢。 – thinkmmk
不,'markForCheck'不会回到祖先的根。这是'ApplicationRef.tick()'。 'markForCheck'使得组件在下一次变化检测轮回时不被跳过。 –