【发布时间】:2017-04-08 13:37:36
【问题描述】:
我有一个 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。在所有出现的标签中加载组件。
【问题讨论】:
-
有一些变通方法或技巧。我想记住一个带有完整示例的 GitHub 问题中的评论,但不知道如何找到它的更多细节。似乎有计划最终更好地支持这一点。
-
你实现过这个吗?
标签: angular