Angular4中通过ClassProvider方式实现依赖注入时,可选参数multi的用处是什么?

useClass方式是常用的依赖注入方式,但一般都只用provide和useClass两个参数,还有一个参数multi很少有人提及,请问它怎么用,有demo最好了。

阅读 2.5k
1 个回答

multi是一个布尔值。

multi为true表示同一个token上面可以挂载多个提供商,根据不同情况实例化不同的提供商。

常用的场景有3个:

第一个,你在全局环境(根模块)配置了一个提供商,但是你在某一个特性模块或者组件当中需要引用同名的token,而又不想用根模块的提供商,你想引用其他的提供商,multi就要为true,可以是userClass、userValue、useFactory任意一种实例化;

第二个,在你使用模板式表单自定义指令,你都需要把自定义表单验证的指令注册到一个NG_Validators的Token上,你自定义的表单验证指令和angular内部表单验证指令都是挂载到NG_Validators,所以,multi要设为true;

第三个,当你自定义表单控件的时候,你需要把你自定义的表单控件注册到一个NG_VALUE_ACCESSORS的Token上面,当引用到该组件时候,可以让angular知道这是个表单控件,可以绑定到对应的表单模型当中,multi设为true,因为你可能有很多个自定义的表单控件。同时,如果你的表单控件需要验证器,那么也需要注册到NG_Validators上。

详情你可以参考angular官网的依赖注入https://www.angular.cn/guide/...

宣传栏