angular - 在页面中多次引导相同的 angular2 模块

标签 angular

我有一个 Web 表单应用程序,它根据配置将用户控件动态加载到页面上(就像具有可重用小部件的 CMS 一样)。我想使用 Angular2 组件实现其中一个用户控件/小部件。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Ng2Widget.ascx.cs" Inherits="Namespace.Ng2Widget" %>
<div>
     <app-root inputValue="<%= settingsValue %>"></app-root>
</div>

“settingsValue”将是一个服务器端变量,具有一些服务器想要传递给组件的值。

因此,如果管理员使用这个新实现的小部件的多个小部件配置页面,则呈现的页面将具有多个相同类型的 Angular2 组件。

渲染出来的页面基本都会有

<div>
         <app-root inputValue="settingsValue1"></app-root>
</div>
<!-- Some other widgets -->
<div>
         <app-root inputValue="settingsValue2"></app-root>
</div>

为了将值传递到根组件,我使用了这篇文章中提到的方法。 Angular 2 input parameters on root directive

在页面的底部,我放置了将模块引导到 .

的 js 文件。
<script type="text/javascript" src="ng2/dist/inline.bundle.js"></script>
<script type="text/javascript" src="ng2/dist/styles.bundle.js"></script>
<script type="text/javascript" src="ng2/dist/main.bundle.js"></script>

页面加载后,Angular 仅将模块引导至标记的第一个实例并完全忽略第二个实例。

我在网上找到的所有示例都试图引导不同模块类型的多个模块,这似乎工作正常。

在 Angular1 中,根应用程序被限定为一个 dom 元素,任何带有 ng-controller 属性装饰的 dom 元素都将组件加载到它们各自的位置。

在 Angular2 的早期版本中,我们能够引导一个组件。但是随着 NgModule 的引入,一个模块正在被引导。但即便如此,我也不认为同一个组件可以引导到多个实例。(即标签的所有实例,呈现组件。)

我在 https://www.reddit.com/r/Angular2/comments/424nwn/using_angular_2_without_it_being_a_single_page_app/

我觉得无论旧版服务器端驱动的应用程序如何尝试使用像 Angular2 这样的客户端框架,这都是相关的。我能够非常轻松地使用 React 组件,因为它们是在运行时通过简单的渲染方法调用渲染并附加到 dom 元素的。

有什么方法/解决方法可以在页面中引导同一模块的多个实例吗? IE。加载所有出现的标签中的组件。

最佳答案

我有完全相同的问题,在挖掘网络后,我终于在这个 plnkr 中找到了解决方案:

https://plnkr.co/edit/I6kxKa78Np73sIWbbYHz?p=preview

神奇的部分在于 ngDoBootstrap 函数:

ngDoBootstrap(appRef : ApplicationRef) {
    this.components.forEach((componentDef : {type: Type<any>, selector: string}) => {
      const factory = this.resolver.resolveComponentFactory(componentDef.type);
      factory.selector = componentDef.selector;
      appRef.bootstrap(factory);
    });
}

想法是将您的组件实例列表注入(inject)包装器模块,并引导 ComponentFactoryResolver 检索的每个组件。

希望这对您有所帮助。

关于angular - 在页面中多次引导相同的 angular2 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40783186/

相关文章:

javascript - Angular 中具有 ngModel 和多个字段的自定义组件

Angular Material 使用颜色选择器设置主题颜色

angular - 从 Web 应用程序中从 firestore 删除字段时出错。 "Unsupported field value: a custom DeleteFieldValueImpl object"

javascript - 这行在 Angular 语法中是什么?

angular - Firestore 通过 ID 数组查询和订阅多个文档

css - ionic 动画脚本问题

javascript - 如何将数据从 API 加载到 Angular 2 中的数组中?

javascript - 这里不允许属性 [ngSwitch],这是 IntelliJ IDEA 2016 告诉我的 Angular2 模板,为什么?

node.js - 如何在浏览器关闭时让我的应用程序注销?

javascript - Angular 9 - 您必须传入 NgModule 或 NgModuleFactory 才能引导