@output
获取具有角度信号的变量值的最佳方法是什么?
假设我们有以下内容
$foo = signal<string>('')
@Output() fooChanged: EventEmitter<string> = new EventEmitter<string(this.$foo())
效果:我首先想到的是使用它,
effect
但是当我读到它时,如果可能的话应该避免使用它。computed:我很想使用它,但我不知道如何正确实现它
@output
获取具有角度信号的变量值的最佳方法是什么?
假设我们有以下内容
$foo = signal<string>('')
@Output() fooChanged: EventEmitter<string> = new EventEmitter<string(this.$foo())
效果:我首先想到的是使用它,effect
但是当我读到它时,如果可能的话应该避免使用它。
computed:我很想使用它,但我不知道如何正确实现它
我有以下代码,我希望首先初始化存储,然后初始化会话,然后您进入应用程序。
export function initApp(
storage: StorageService,
session: SessionService,
) {
return async () => {
await firstValueFrom(
storage.initialized$.pipe(
filter((event) => (event ? true : false)),
take(1),
),
)
await firstValueFrom(
session.initialized$.pipe(
filter((event) => (event ? true : false)),
take(1),
),
)
}
}
我曾经像下面这样实现它
{
provide: APP_INITIALIZER,
useFactory: initApp,
deps: [StorageService, SessionService],
multi: true,
},
但是使用最新的provideAppInitializer,我找不到为方法提供 deps 的方法。
看起来 Angular 团队已经改变了实现它的方式,如下useFactory
所示:
provideAppInitializer(() => {
const initializerFn = ((service: Service) => {
return () => service.init();
})(inject(Service));
return initializerFn();
});
但我不知道该把我的依赖关系交给谁。
有人知道吗?
我有一个应该在应用程序启动时运行的库。
我看到 Angular 19 现在使用provideAppInitializer。我确实使用了自动角度ng update
迁移 cli,它更改了代码。
// From
{
provide: APP_INITIALIZER,
useFactory: (service: NgxBackButtonService) => () => service,
deps: [NgxBackButtonService],
multi: true,
},
// To
provideAppInitializer(() => {
const initializerFn = ((service: NgxBackButtonService) => () => service)(inject(NgxBackButtonService))
return initializerFn()
}
但这不起作用并抛出以下错误
Argument of type '() => NgxBackButtonService' is not assignable to parameter of type '() => void | Observable<unknown> | Promise<unknown>'.
Type 'NgxBackButtonService' is not assignable to type 'void | Observable<unknown> | Promise<unknown>'.ts(2345)
有人知道我该如何适应它吗?