Injectable
数据注入有两种方式:
- 模块级: @NgModule() 或 @Injectable()
- 元素级:在每个 DOM 元素上隐式创建。除非你在 @Directive() 或 @Component() 的
providers
属性中进行配置,否则默认情况下,ElementInjector
为空。
-
@Injectable()
装饰器具有一个名叫providedIn
的元数据选项,在那里你可以指定把被装饰类的提供者放到root
注入器中,或某个特定NgModule
的注入器中。
// special.service.ts 文件
@Injectable({
providedIn: root // 配置该参数,会自动挂载到根元素上,可以做摇树优化,自动去掉未引用的
})
export class SpecialService {}
-
@NgModule()
和@Component()
装饰器都有用一个providers
元数据选项,在那里你可以配置 NgModule 级或组件级的注入器。
// module.ts 文件中要用 special 中的方法
// service 文件@Injectable() 没传参
import {SpecialService} from '@app/user/special-service/special.service';
@NgModule ({
providers: [ SpecialService]
})
路由
RouterModule.forChild()
与 Router.forRoot()
方法类似,但它只能应用在特性模块中。根模块中使用 forRoot(),子模块中使用 forChild()