Javascript 需要另一个升级组件的升级AngularJS组件可以';使用角度内容投影时,无法找到父控制器
我试图在我的应用程序的一个模块上为ngUpgrade做一个PoC,但我遇到了一个问题,即转换/内容投影以及AngularJSJavascript 需要另一个升级组件的升级AngularJS组件可以';使用角度内容投影时,无法找到父控制器,javascript,angularjs,angular,typescript,ng-upgrade,Javascript,Angularjs,Angular,Typescript,Ng Upgrade,我试图在我的应用程序的一个模块上为ngUpgrade做一个PoC,但我遇到了一个问题,即转换/内容投影以及AngularJS要求 假设有一个降级的角度分量,定义如下: @Component({ selector: 'common-filter', template: ` <ajs-filter> <div>Common Filter</div> <ajs-button text="Outside of conten
要求
假设有一个降级的角度分量,定义如下:
@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 {}
正常使用common filter
效果很好,但是当投影ajs按钮时,如:
<common-filter>
<ajs-button text="Inside of content projection"></ajs-button>
</common-filter>
上面的代码片段来自index.html
和common filter.component.ts
。这是一个(或多或少)基于更复杂组件的最小示例。出于性能原因,我将采用降级模块方法。一位维护人员gkalpak在我为此发布的Github问题中提供了解决此问题的方法:
简而言之,这是不同控制器初始化顺序的问题。
要解决此问题,您可以将父级require
设置为可选,然后使用setTimeout
等待父级控制器初始化:
this.$onInit = () => {
this.requireAjsFilterCtrl().then(() => console.log('!', !!this.ajsFilterCtrl));
}
this.requireAjsFilterCtrl = () => {
return new Promise(resolve => {
setTimeout(() => {
this.ajsFilterCtrl = this.ajsFilterCtrl || $element.controller('ajsFilter');
resolve(this.ajsFilterCtrl);
});
});
};
可以在此处看到解决方法的实际作用:
我不知道如何传达这一点,但对于我问题的其他潜在编辑,请在建议错误编辑之前研究ngUpgrade是什么。
this.$onInit = () => {
this.requireAjsFilterCtrl().then(() => console.log('!', !!this.ajsFilterCtrl));
}
this.requireAjsFilterCtrl = () => {
return new Promise(resolve => {
setTimeout(() => {
this.ajsFilterCtrl = this.ajsFilterCtrl || $element.controller('ajsFilter');
resolve(this.ajsFilterCtrl);
});
});
};