Кажется, что это ограничение гибридного режима.В моем случае необходимо было динамически создавать обновленные компоненты и подключать их к DOM.В этом случае можно использовать следующий обходной путь:
- Создать обычный угловой компонент в качестве оболочки для обновленной директивы AngularJS, чтобы его шаблон содержал только обновленную директиву
- Добавить эту оболочкукомпонент в
entryComponents
секцию модуля - Динамически создать экземпляр этого компонента-оболочки, используя инжектор корневого гибридного компонента
Например, у меня есть фиктивная директива AngularJS
angular.module('app').component('myComponent', {
template: 'dummy content',
controller: class {},
controllerAs: 'vm'
});
@Directive({
selector: 'my-component'
})
export class MyUpgradedDirective extends UpgradeComponent {
constructor(elementRef: ElementRef, injector: Injector) {
super('myComponent', elementRef, injector);
}
}
Создание компонента оболочки:
@Component({
selector: 'app-nested',
template: '<my-component></my-component>'
})
export class WrapperComponent { }
Добавление его в entryComponents
@NgModule({
imports: [ BrowserModule, UpgradeModule ],
declarations: [ AppComponent, NestedComponent, MyUpgradedDirective ],
entryComponents: [ AppComponent, NestedComponent ] // here
})
Создание экземпляра оболочки с использованием инжектора из корневого гибридного компонента:
function createMyComponent<T>(componentFactoryResolver: ComponentFactoryResolver, injector: Injector /* must be passed from root hybrid component */, component: Type<T>) {
return componentFactoryResolver
.resolveComponentFactory(component)
.create(injector);
}
Вот некоторые подробности: https://github.com/angular/angular/issues/27432