我正在尝试在我的应用程序的一个模块上为 ngUpgrade 做一个 PoC,并且我遇到了与 AngularJS 一起嵌入/内容投影的问题requires
。
假设有一个降级的 Angular 组件定义如下:
@Component({
selector: 'common-filter',
template: `
<ajs-filter>
<div>Common Filter</div>
<ajs-button text="Outside of content projection"></ajs-button>
<ng-content></ng-content>
</ajs-filter>
})
export class CommonFilter {}
ajsButton
是一个升级的 AngularJS 组件,需要一个父控制器:
require: {
ajsFilterCtrl: '^ajsFilter'
}
正常使用common-filter
效果非常好,但是在投影时ajs-button
:
<common-filter>
<ajs-button text="Inside of content projection"></ajs-button>
</common-filter>
抛出此错误:
Unhandled Promise rejection: [$compile:ctreq] Controller 'ajsFilter', required by directive 'ajsButton', can't be found!
有没有办法解决?我知道我可以重写周围的类,但是许多其他应用程序都在使用它们,我需要能够逐步升级这些应用程序。
工作示例:
https://stackblitz.com/edit/ngupgradestatic-playground-uvr14t
上面的片段来自index.html
和common-filter.component.ts
。这是一个(或多或少)基于更复杂组件的最小示例。downgradeModule
出于性能原因,我将采用这种方法。