小编Vit*_*vzh的帖子

在Angular 4中的服务中使用Router

我已经使用Angular 2/4大约一年了,我一直在回到这个困境,无论是否将路由器注入服务都被认为是一种不好的做法?

这是更具建筑性的问题.我相信没有确切的答案,但我想听听你的意见.所以这里有两个例子.

  1. 考虑下一个代码.想象一下,我们有一些组件,我们希望在一些操作后将用户重定向到特定路由,例如用户添加了一个新实体,我们想将他重定向回网格.

component.ts

constructor(private router: Router) {}

someAction() {
  // Some code here
  this.router.navigate(['/grid']);
}
Run Code Online (Sandbox Code Playgroud)

在这里我认为使用Router非常好,因为路由器和组件都是UI层.

  1. 现在让我们假设我们拥有auth.service.ts它并且它负责身份验证.我们希望能够将用户退出应用程序,我们有logout()能力这样做.

auth.service.ts

constructor(private router: Router) {}

logout() {
  // Cleanup token, storage, etc.
  this.router.navigate(['/login']);
}
Run Code Online (Sandbox Code Playgroud)

所以在架构上思考:

  1. 您如何看待服务中的这种路由器使用情况?
  2. 你认为这是一种有效的方法吗?
  3. 如果不是,你在这种情况下建议什么?

我正在考虑在app.component.ts中eventEmitter加入authService并订阅它,但仍然不确定它是否比在服务中使用它更好.

我感谢对此案的任何评论.非常感谢!

编辑

另一个例子:UI是一个包含任务的日历.

有一种服务可以处理所有数据流并为日历提供数据.日历本身不会询问数据,而是订阅服务中的数据更改.

现在我需要将用户路由到此日历的不同屏幕.想象一下,用户点击下周/月/年.

此数据存储在路径URL中,因此用户可以在页面刷新后的同一天停留,但日历组件不知道日期/周/月.

它们包含在服务中.那么在这种情况下你会使用路由器吗?

angular

11
推荐指数
1
解决办法
8978
查看次数

如何在Ngrx效果中参数化Rx delay()函数?

我正在尝试在ngrx效果中实现可配置的延迟。但是RxJS delay()函数不能仅接收lambda作为参数number | Date。我想做的是tap将有效负载中的值存储到某个全局变量中,然后将其用作参数,delay()但它不起作用。delay()似乎是用旧的变量值调用的。这是供参考的代码段:

@Effect()
  delayHideRx$ = this.actions$
    .ofType(IconsActions.DELAY_HIDE_RX)
    .pipe(
      tap((action: Action) => { rxDelay = action.payload }),
      delay(rxDelay),
      map(() => {console.log('delay hide rx'); return IconsActions.hideRx(rxDelay)})
    );
Run Code Online (Sandbox Code Playgroud)

基本上,我要实现的是某种setTimeout()功能,但仅包含操作。

通常,任务听起来像这样:一旦收到来自服务器的推送,我们需要显示一些图标,并在一定时间后将其隐藏。时间量来自服务器。

我将不胜感激有关如何参数化delay()输入参数的任何建议,以及有关在这种情况下为何延迟采用先前值的任何解释。

谢谢!

rxjs typescript ngrx angular

2
推荐指数
1
解决办法
615
查看次数

标签 统计

angular ×2

ngrx ×1

rxjs ×1

typescript ×1