我有一个非常简单的选择器
\n\nexport const isLoading = createSelector(\n state => state.$loading\n);\n
Run Code Online (Sandbox Code Playgroud)\n\n和两个操作StartLayoutNavigationAction
,EndLayoutNavigationAction
只需$loading
相应地设置标志。\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\nlayoutLoading$: 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\nACTION \xe2\x80\x93 [Layout] Start navigation StartLayoutNavigationAction\xc2\xa0{layout: "login", type: "[Layout] Start …
Run Code Online (Sandbox Code Playgroud) 这样做有什么缺点吗
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 个注入服务来扩展构造函数。