2016-08-25 57 views
1

我有两个组成部分:名单和项目,并使用<template>设置项目渲染列表:数据与推检测策略模板结合

 <chat-message-list [messages]="messages | async"> 
      <template> 
       <chat-message [isTimestampVisible]="isTimestampVisible | async"></chat-message> 
      </template> 
     </chat-message-list> 

而且两者列表和消息是利用推送检测策略( ChangeDetectionStrategy.OnPush)。

之前我用<template>设置项目渲染器isTimestampVisible属性被正确绑定。当我使用<template>isTimestampVisible属性更改后不再刷新。我不想使用默认检测策略,因为我使用React获得了不可变模型。

它的工作正常,当我通过Observable<chat-message>而不是布尔值,但<chat-message>是我的“哑”组件,所以它不应该收到Observable - 只是纯粹的价值。

http://plnkr.co/edit/4qUDeOBoMmUsuRsBx2w9?p=preview

如果您在message-list.ts结合正在改变ChangeDetectionStrategy.OnPushChangeDetectionStrategy.Default

+0

请问当你改变成分为默认'ChangeDetectionStrategy'工作? –

+0

是的,但没有模板,即使使用'ChangeDetectionStrategy.OnPush'也能工作。没有模板数据通过列表传递:MyComponent-> MessageList-> Message – NagRock

+0

我想这需要一个Plunker来重现和调试。 –

回答

0

使用OnPush该组件仅在调用它时或输入发生更改时才运行更改检测。

我刚刚添加了一个输入到<message-list>并通过isTimestampVisible,使其每次更新isTimestampVisible更改。

Plunker example

+0

是的,但我想直接将数据传递给消息组件。您的实施看起来像解决方法。如果我想通过列表组件传递数据,我可以在没有模板的情况下执行此操作。 – NagRock

+0

这不是关于传递数据,而是关于通知需要更新的列表。 –

+0

好吧,我明白,我在想,如果我直接传递数据到消息它将被更新。 – NagRock