小编Gia*_*Voß的帖子

@ngrx 选择器并行发射两次

我有一个非常简单的选择器

\n\n
export const isLoading = createSelector(\n  state => state.$loading\n);\n
Run Code Online (Sandbox Code Playgroud)\n\n

和两个操作StartLayoutNavigationActionEndLayoutNavigationAction只需$loading相应地设置标志。\n我调用这些函数一次,我的操作就会被记录:

\n\n
ACTION \xe2\x80\x93 [Layout] Start navigation StartLayoutNavigationAction\xc2\xa0{layout: "login", type: "[Layout] Start navigation"}\nACTION \xe2\x80\x93 [Layout] End navigation EndLayoutNavigationAction\xc2\xa0{type: "[Layout] End navigation"}\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,人们会假设选择器将在调用第一个操作时发出一次,在调用第二个操作时发出一次。中间没有任何动作。

\n\n

但:

\n\n

选择器似乎并行发出两次。我管道如下:

\n\n
layoutLoading$: Observable<boolean> = this.store.pipe(\n  select(isLoading),\n  distinctUntilChanged((x, y) => {\n    console.log("Comparison:", x, y);\n    return x === y;\n  }),\n  tap(value => console.log("New val:", value))\n);\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是输出:

\n\n
ACTION \xe2\x80\x93 [Layout] Start navigation StartLayoutNavigationAction\xc2\xa0{layout: "login", type: "[Layout] Start …
Run Code Online (Sandbox Code Playgroud)

rxjs ngrx

5
推荐指数
1
解决办法
2356
查看次数

使用injector.get代替构造函数注入

这样做有什么缺点吗

constructor(public injector: Injector) {}

foo() {
  this.injector.get(SomeService).doStuff();
}
Run Code Online (Sandbox Code Playgroud)

而不是这个

constructor(public service: SomeService) {}

foo() {
  this.service.doStuff();
}
Run Code Online (Sandbox Code Playgroud)

除了可读性之外?

我有一个相当复杂的相互扩展的组件层次结构,并且我希望避免每次都使用 4 或 5 个注入服务来扩展构造函数。

dependency-injection angular

3
推荐指数
1
解决办法
2588
查看次数

标签 统计

angular ×1

dependency-injection ×1

ngrx ×1

rxjs ×1