javascript - Angular2 - NgModule 之外的组件注入(inject)

标签 javascript angular typescript

我是 A2 的新手,所以之前可能有人问过这个问题,但我使用了错误的术语,所以找不到答案。

但是,我试图了解 A2 中的 @Component 注入(inject)。据我所知,所有组件,无论它们如何嵌套,都必须在根级别声明为 NgModules 文件的一部分(即,此处声明的服务可通过所有组件访问)

@NgModule({
    imports: [
        ...
    ],
    declarations: [
        1stComponent,
        2ndComponent,
        3rdComponent,
        4thComponent     <-- All components must be included here
    ],
    providers: [
       ...
    ],
    bootstrap: [
        AppComponent
    ]
})

对我来说,这似乎有点奇怪。如果您有一个仅作为 ParentComponent 的一部分显示的 ChildComponent 怎么办?为什么 ChildComponent 需要在 NgModule 级别声明?这个 ChildComponent 是否可以在需要时不声明为父组件的一部分?在加载应用程序时预先声明所有组件不会导致开销 - 它需要预先获取所有内容吗?或者只是 NgModule 定义了构建的组件,而不是它们在运行时显示的时间或方式?

最佳答案

在 Angular 的早期版本中,它按照您期望的方式运行(即每个组件都定义了自己的依赖项)。 在 RC 发布前后,A2 团队决定对其进行更改。

正如 Estus 提到的,您可以使用延迟加载。有很好的引用指南here这说明了如何去做。 (向下滚动到“延迟加载主页模块”部分)。

基本上,Angular 团队决定允许您将应用程序分割成不同的模块,从而所有组件和指令 依赖项在模块级别定义。如果您真的担心初始负载太大,请将其分解 进入不同的模块。

同样在回答你的问题时,是的,通过在 app.module.ts 的声明数组中定义你的组件,然后你将随后加载它们。 (因为您必须首先将它们导入文件中才能引用它们)。

关于javascript - Angular2 - NgModule 之外的组件注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41133149/

相关文章:

javascript - 如何在 *ngFor 中的数组元素之间放置逗号?

javascript - 用标签替换文本

javascript - 根据行的 Highcharts 工具提示背景(不设置 backgroundColor = null)

javascript - PrimeNG 的 'onClose' 日历事件在跳出字段时未触发?

javascript - 将 Node.js 模块中的 readline 函数集成到 readline 函数中以获取用户输入

asp.net - 在 ASP.Net MVC 中使用 @Html.AntiForgeryToken() 提供 CSRF token 的替代方法

javascript - Apollo-Server 以干净的方式显示错误

angular - 使用 angular-oauth2-oidc 和 "silent refresh"没有白名单 silent-refresh.html

angular - ag-grid 和 angular,如何动态切换网格选项

typescript - 记录类型反转器