混合AngularJS / Angular 6 app模块依赖性问题

时间:2018-05-14 19:48:18

标签: angularjs angular ng-upgrade

我目前正在为Angular 6探索一个相当大的AngularJS 1.6应用程序的升级路径。我将我的app bootstrapping作为混合应用程序,我已经开始转换单个模块和组件。不过,我需要能够以块的形式进行迁移。如果我可以一次迁移一个模块会很好,但我为此遇到了一些问题。

我有一个NavBar指令,它位于我的core AngularJS模块中。该组件正在降级为downgradeComponent并在AngularJS core模块上注册。 landing AngularJS模块依赖于core模块,因此它可以使用NavBar。这样可以正常工作,因为LandingComponent也已转换为Angular6并且正在降级并在landing AngularJS模块上注册。

但是,在任何其他AngularJS组件中使用NavBar组件时会出现问题。我有第三个名为workflows的AngularJS模块,其ViewWorkflows组件在其模板中有NavBar。当我导航到该组件时,我收到以下错误:

angular.js:14791 Error: No component factory found for NavBarDirective. Did you add it to @NgModule.entryComponents?

我可以通过转换然后降级ViewWorkflows来解决此问题,但由于NavBar被注册为降级的AngularJS组件,因此不应该声明对{{1}声明依赖关系的任何AngularJS模块1}}模块可以访问它吗?

Code (Not runnable)

编辑:我已经更新了要点,使其更加简单。 core模块是Angular,其Angular组件landing降级为在AngularJS <landing>模块上运行,其中包含landing。它依赖于<t-nav-bar>模块,该模块提供降级的core指令。 <t-nav-bar>组件是在AngularJS <test>模块上注册的AngularJS组件,不能使用landing。甚至没有将<t-nav-bar>模块带入这种情况,它也不起作用。我做错了什么?

1 个答案:

答案 0 :(得分:0)

我已经成功解决了这个问题。我试图将NavBar声明为Angular @Directive。它实际上需要是@Component。完成切换后,它完全按预期工作。

我用this个回复来测试,并在那里发现了问题。这是一个新的Angular 6应用程序,我为了试验而“降级”。