我们有一个 AngularJS 应用程序。“主”模板超出了它的范围:它是由 CMS 生成的。我们不知道页面会是什么样子。AngularJS 应用程序在任何有 AngularJS 组件的地方启动。
它不是 SPA,我们只创建交互式组件,这些组件在页面刷新出现之前一直存在。
我们引导应用程序angular.bootstrap(document, ['App'], { strictDi: true });
一个非常精简的版本:
<html>
<body>
<div>
<usermenu></usermenu>
</div>
<div>
<item-list></item-list>
</div>
</body>
</html>
我们想迁移到 Angular(撰写本文时为 6 个)。我使用 AngularJS 应用程序创建了一个应用程序,cli
并将生成的应用程序与我们的 AngularJS 应用程序合并。
然后我按照https://angular.io/guide/upgrade上的 ngUpgrade 教程进行操作。虽然它已经过时(仍然使用 SystemJS!)我设法启动并运行:我的 AngularJS 应用程序由 Angular 引导。
在上面提到的示例中,我有两个 AngularJS 组件:usermenu
和item-list
. 他们都使用任意数量的服务。
随着时间的推移,会发生两件事:
- 我转换
usermenu
为 Angular 组件,但我没有降级组件 - 我创建了一个新的 Angular 组件(即
signout-button
:)
考虑我的新模板:
<html>
<body>
<div>
<usermenu></usermenu> <!-- Angular component -->
</div>
<div>
<item-list></item-list> <!-- AngularJS component -->
</div>
<div>
<signout-button></signout-button> <!-- Angular component -->
</div>
</body>
</html>
- 以下模板会引导 Angular 和 AngularJS 组件吗?
- 还是我需要降级这两个 Angular 组件才能正常工作?
ngUpgrade 指南提到了“AngularJS OWNS the root component”之类的东西。要在 AngularJS 中使用 Angular 组件,您需要对其进行降级。要在 Angular 中使用 AngularJS 组件,需要对其进行升级。但是由于我有三个根组件,它会起作用吗?
我当然试过了,但我无法让它工作。我有一种感觉,AngularJS 拥有的“根组件”不是找到的组件之一,而是应用程序被引导的元素(document
在我的例子中)。
有人可以确认这一点,所以我知道降级组件是唯一的方法,或者也许在使用 Angular 和 AngularJS 组件“彼此相邻”引导时指出我正确的方向?