关于 angularjs:Angular Ng1/Ng2 混合应用程序抛出 \\’No provider for $scope\\’ 异常

Angular Ng1/Ng2 hybrid app throwing 'No provider for $scope' exception

我正在尝试构建一个使用 NgUpgrade 的混合 Ng1/Ng2 应用程序,作为向 Angular 2 迁移的中间步骤。

引导程序似乎可以工作:

1
2
3
platformBrowserDynamic().bootstrapModule(AppModule).then( () => {
  adapter.bootstrap(document.body, [Ng1AppModule.name]);
});

但我正在努力在 Ng2 组件中使用简单的 Ng1 指令,请参阅这个非常简单的插件:https://plnkr.co/edit/gMSwKKIgEkwcijCCaCMW?p=preview

即使在升级了 Ng1 指令并降级了 Ng2 组件之后,浏览器仍会发送"No provider for $scope!"异常。

我错过了什么?

我知道有些人已经报告了这个异常,但看起来 NgUpgrade 自从 Angular 2 的 beta 版以来已经发展了很多,我找不到当前 Angular 2 版本的合适答案。


找到了!

我的错误是尝试直接引导 ng2 模块,但看起来您必须将 ng1 组件放在 DOM 的顶层(是的,它写在官方 ngUpgrade 指南的某处)。这是正确更新的具有 ng1 根组件的 plunker,它调用一个 ng2 模块,它调用另一个 ng1 组件。

1
2
3
4
5
6
 const myNg1Root = {
     template: `
       <p><center>[wp_ad_camp_2]</center></p><p>This is the Angular 1 root component</p>
       <ng2root></ng2root>
       `,
};