我最近将ngrx商店添加到我现有的angular2应用程序中,以简化代码并保持共享状态。 但是我对一个部分感到困惑,我一开始就在服务器上更新状态,而在病房后我只是在没有检查服务器的情况下工作。那么当后端发生某些变化时会发生什么?每当我去那个网页或有更好的方法时,我是否会检查它? 基本上,我想知道确保您的状态数据更新以显示服务器数据的最佳做法是什么?我的ngrx商店如何检测服务器端的更改?
回答
建议使用NGRX Effects。当您将NGRX Effects与Store一起实施时,任何HTTP副作用都将由Effects处理,而后者将使用Store中的Action来更新数据。一个Effect监听Action并使用Action的有效载荷执行副作用(HTTP)。当效果完成后,它会使用新的有效内容调用新的Action(成功的Action或失败的Action),从而更新Store中的数据。
在example in the Effects docs它显示Login
的效果:
@Injectable()
export class AuthEffects {
constructor(
private http: Http,
private actions$: Actions
) { }
@Effect() login$ = this.actions$
// Listen for the 'LOGIN' action
.ofType('LOGIN')
// Map the payload into JSON to use as the request body
.map(action => JSON.stringify(action.payload))
.switchMap(payload => this.http.post('/auth', payload)
// If successful, dispatch success action with result
.map(res => ({ type: 'LOGIN_SUCCESS', payload: res.json() }))
// If request fails, dispatch failed action
.catch(() => Observable.of({ type: 'LOGIN_FAILED' }))
);
}
在这个例子中,对于登录的效果侦听LOGIN
行动。当LOGIN
操作发生时,它使用操作的有效内容并执行HTTP POST。当HTTP POST返回时,它会调用动作LOGIN_SUCCESS
以及有效负载的json响应,或者返回LOGIN_FAILED
操作。
这样,您的商店始终保持在任何副作用循环中,如HTTP。如果一个组件更新数据库中的记录,则该效应应通知该存储,以便订阅该数据的所有组件都可以获取更新的数据。
希望有所帮助。
感谢您的详细解答Tyler。我部分理解你的意思。我还没有打开NGRX效果。但我现在会这样做,这可能会解决我的顾虑。非常感谢 –
这里有很多例子使得效果比需要的更复杂。基本上,您现有的HTTP调用可以修改为通过侦听某些操作,然后使用新的有效内容返回新的操作来充当效果。效果监听的动作(例如上面示例中的“LOGIN”)可能只需要立即将未修改的有效内容返回到组件,直到该效果使用新的有效内容调用新的动作。 –
效果的很好解释,但可能无法回答这个问题?我对Q的理解:服务器上的某些变化(例如,用户B完成了我列表中的Todo)。服务器如何发回信号(服务器事件,网络套接字,Mq ...)以及哪些代码会触发商店的操作? – stwissel
- 1. Angular 2 Ngrx商店:更新数组
- 2. 如何检测服务何时更改?
- 3. 在将Ngrx商店服务实施到我的组件中的问题
- 4. 如何从ngrx商店中获取值到我的模板中?
- 5. 检测Silverlight服务器端
- 6. 商店订阅未与NGRX店4
- 7. npm如何更改服务器端口
- 8. 应用版本更新检查与Play商店没有使用任何后端服务器/网络服务?
- 9. 检测服务器端的TimeoutException WCF
- 10. htaccess的服务器端WEBP检测
- 11. 如何直接从服务器端过滤的商店获取值
- 12. 更改TeamCity web服务器的端口
- 13. 更改Apache Web服务器的端口
- 14. 更改服务器端的url
- 15. 如何在控制器中更改网格的商店/网址?
- 16. Java:如何让客户端检测网络上的服务器?
- 17. iPhone商店远程服务器图像
- 18. 日内瓦服务器和SQL商店
- 19. 我们如何检测到服务器数据库已从iPhone更改?
- 20. @ngrx - 将商店查询链接到BehaviorSubject
- 21. ngrx商店4选择不工作
- 22. @ngrx 4商店返回类型
- 23. 异步管道和ngrx商店
- 24. Angular - Karma - ngrx - 没有店铺提供商
- 25. NgRx无法从商店中选择
- 26. 如何检测我的Web服务器上的移动客户端?
- 27. Android:我如何检测制造商和更改程序行为
- 28. 如何在不推送到服务器的情况下更新中继商店
- 29. 服务器端设备检测
- 30. 对象检测 - 服务器端 - 技术
您是否在谈论服务器通知,如[Server Sent Events](https://en.wikipedia.org/wiki/Server-sent_events) –