angular怎么全局引入NzModalService

每个需要用到NzModalService的地方都单独引入一遍,觉得好麻烦,可以全局引入吗?

import { NzModalService } from 'ng-zorro-antd/modal';
export class xxxComponent implements OnInit {
    constructor(
        // 组件里单独引入麻烦,想全局引入
        private modal: NzModalService
    ) { }
}
阅读 5.3k
2 个回答

你没有办法这样做。

  1. angular中每个组件都是可以独立、可供单独进行测试的。如果可以全局引入某个service,则组件将依赖于全局,这里的全局应该指应用上下文。也就是说:组件必须被应用到特定的上下文中才能使用。这违背了angular组件独立的原则。
  2. angular的摇树优化也不允许我们这么做。为了减轻angular应用在启动时的体积,在应用被构建时angular可以很聪明的将当前应用(惰性加载时可能是模块)不需要的服务掉,从而减少用户请求的体积。如果可以全局注入某个服务,那么无论该服务是否被当前组件使用,都无法被掉,这也违背了angular的设计原则。
angular官方文档中并未找到相关的说明,所以以上纯属个人猜想。

NzModalService 的地暖管一
`@Injectable()

export class NzModalService implements OnDestroy {

...code here

}

@NgModule({

imports: [

*code here

],

exports: [*],

providers: [NzModalService],

entryComponents: [*],

declarations: [

*code

]

})

export class NzModalModule {}

`

从以上得知,ngModalService不是全局服务,导入时依赖于NzModalModule,在Angular文档里面没有全局module的概念,但是你可以参照BrowserModule,对于运行在浏览器中的应用来说,都必须在根模块中 AppModule 导入 BrowserModule,因为它提供了启动和运行浏览器应用时某些必须的服务。BrowserModule 的提供者是面向整个应用的,所以它只能在根模块中使用,而不是特性模块。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题