Угловая ошибка 6 компиляции при использовании AOT
Я недавно вынужден использовать AOT, и в производстве шаблон не скомпилирован должным образом. Когда я примеряю пустой проект, он отлично работает, но в моем гигантском приложении есть проблема.
Что-то вроде этого:
@Component({
selector: 'app-c3',
template: '<ng-template #container></ng-template>',
styleUrls: [],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class App3Component {
_container: ViewContainerRef = null;
@ViewChild('container', { read: ViewContainerRef })
set container(value: ViewContainerRef) {
console.log('set');
this._container = value;
}
get container(): ViewContainerRef {
return this._container;
}
}
составлен как
function View_App3Component_0(_l) { return _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵvid"](2, [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵqud"](402653184, 1, { container: 0 }), (_l()(), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵand"](16777216, [[1, 3], ["container", 2]], null, 0, null, View_App3Component_1))], null, null); }
Тем не менее, в моем гигантском приложении оно скомпилировано так:
function View_DynamicComponent_0(_l) { return _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵvid"](2, [(_l()(), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵand"](0, [["container", 2]], null, 0, null, View_DynamicComponent_1))], null, null); }
Проанализировав немного больше, я вижу, что это container
рассматривается как anchorDef
(ɵand
) вместо queryDef
(ɵqud
). Что может вызвать эту ошибку? Как я могу продолжить исследование, чтобы выяснить, почему anchorDef
выводится в этом случае.
1 ответ
После долгого поиска я обнаружил, что проблема возникла из-за отсутствия экспорта в иерархическом классе. Такие как это:
/*export*/ class DynamicComponentBase {
@ViewChild('container', { read: ViewContainerRef })
container: ViewContainerRef;
}
@Component({
selector: 'tn-dynamic',
template: `<ng-template #container></ng-template>`,
changeDetection: ChangeDetectionStrategy.OnPush
})
export class DynamicComponent extends DynamicComponentBase {
}
Добавляя экспорт, компилятор создает правильную вещь.
Я открыл ошибку в команде Angular.