Angular可选的多拦截器——为什么它被注入为null?



给出如下定义的多注入列表,没有任何提供程序,我希望注入列表为空,但实际上它是空的。

是否有一种方法注入值作为[]而不是null,如果没有这个可注入的提供者?我不能重写构造函数中的值,因为构造函数中的代码在字段初始化器之后运行,所以错误发生在我可以纠正值之前。


const MY_INTERCEPTORS: InjectionToken<MyInterceptor> = new InjectionToken('MyInterceptors');

@Injectable()
export class MyService {
constructor(
@Optional() @Inject(MY_INTERCEPTORS) private readonly interceptors: MyInterceptor[]
) {
super();
}
public myField$(input: Foo) = this.interceptors.reduce((agg, e) => e.intercept(agg), input);  // Expect this.interceptors to be [], but is null
}

你可以为你的InjectionToken提供一个工厂。它将被用作默认值

const MY_INTERCEPTORS: InjectionToken<Array<MyInterceptor>> = new InjectionToken('MyInterceptors', {
factory: () => [],
});
顺便说一下,InjectionToken的类型应该是array
const MY_INTERCEPTORS: InjectionToken<Array<MyInterceptor>>

相关内容

  • 没有找到相关文章

最新更新