是否可以在@NgModule(而不是AppModule)中有条件地导入BrowserModule?

问题描述 投票:0回答:1

我的 Angular 应用程序中遇到这种情况:我的 AppModule 带有多个导入的模块,当然包括 BrowserModule。 在我的应用程序的另一个模块中(我有一个管理路由的 AppRoutingModule,每个模块都有自己的模块),我想有条件地导入 BrowserModule,因为这个特定的模块可以是

  • 这个应用程序的一个简单模块(在这种情况下我不需要导入 BrowserModule)
  • 或者一个 Parcel,我将导出它并导入到另一个项目中(在这种情况下,我需要导入 BrowserModule,否则它不能作为独立模块工作)

正如您在下面的示例中看到的,我尝试根据 window.location.href 有条件地导入此模块(这样我可以检查哪个应用程序正在运行),但应用程序编译失败。有几个错误,它不再识别 NewRequestComponent 元素。

import {CommonModule} from '@angular/common';

import {NewRequestRoutingModule} from './new-request-routing.module';
import {NewRequestComponent} from './pages/new-request/new-request.component';
import {SharedModule} from '@app/shared';
import {BrowserModule} from '@angular/platform-browser';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';

const isParcelComponent = !window.location.href.includes('/appric');

@NgModule({
  declarations: [
    NewRequestComponent,
  ],
  imports: [
    CommonModule,
    isParcelComponent ? BrowserModule: [],
    NewRequestRoutingModule,
    SharedModule,
  ],
  bootstrap: [NewRequestComponent],
})
export class NewRequestModule {}

这是一个错误示例

你知道为什么编译失败或者我怎样才能实现我的目标吗? 先谢谢你了

angular angular-module
1个回答
0
投票

我明白为什么你认为不在简单组件中导入 browserModule 是个好主意,但在 Angular 中,我们需要在根模块(AppModule)中导入 browserModule,它提供了 Angular 启动和运行应用程序所需的基本功能。模块的组织方式是:

AppModule(根模块): 它应该只包含其他每个模块正常工作所需的基本导入,BrowserModule 就是其中之一。如果您有任何其他模块,它也应该包含在根模块中。

任何其他模块: 应仅包含其组件所需的依赖项,并且不能重新导入已在 AppModule 中导入的导入,因为它已在 AppModule 中导入并且已导入其依赖项

这不是一个好的实践,我什至不知道是否可以有条件地导入依赖项,如果您想要类似的东西,请使用模块的层次结构

© www.soinside.com 2019 - 2024. All rights reserved.