Angular:如何全局导入所有其他模块都可以访问的模块。 (无需在其他模块中重新导入)

时间:2019-02-15 19:44:24

标签: angular angular-module global-scope

我想为所有其他模块(路由的子模块)全局使用UI框架。

我正在使用最新版本的Angular and Material(7.2+)。 https://material.angular.io/

我创建了一个Angular模块,该模块可以导入所有Angular Material UI模块。 已导入app.module.ts。直到我通过加载另一个模块来更改路由之前,它都可以正常工作。 - 我知道为什么。因为每个模块都是单独的作用域。 但是应该可以全局导入模块,每个组件都可以访问UI(html)。

我想导入app.module.ts中的所有Mat..Modules(已完成),也可以访问其他模块(例如DashboardModule)。 当前,我必须再次将MaterialModules导入每个模块组件(页面)。 我肯定/希望这是可能的。因为UI应该可以全局访问整个页面。

2 个答案:

答案 0 :(得分:0)

我认为没有希望是不可能的。模块的重点是封装它们的内容,并且仅通过导出公开特定的内容。另一面是,如果要使用另一个模块导出的内容,则必须导入它。没有“全局导入”

答案 1 :(得分:0)

那不是Angular模块的工作原理。

注意:此方法不起作用,如果找到解决方案,则会更新答案

但是有一种解决方法,创建自己的Decorator来包装NgModule装饰器,并在声明其他模块时使用它。

这里是一个例子:

function CustomeNgModule(options: NgModule){
    options.imports = options.imports || []; 
    options.imports.push(SharedModule);
    return NgModule(options);
}

并将其用作

@CustomeNgModule({/*options*/})
export class AbcModule {
}

我还没有测试我的代码,但是它应该可以工作,如果没有,请告诉我。

如果需要有关装饰https://www.typescriptlang.org/docs/handbook/decorators.html的更多信息