Невозможно объединить декораторы @Input с декораторами запросов, использующими Ivy
Я перенес свое приложение angular 7 на 8.0.0, и теперь я пробую новый компилятор ivy.
Приложение отлично работает без плюща, но когда я пытаюсь скомпилировать его, у меня появляется следующая ошибка:
Невозможно объединить декораторы @Input с декораторами запросов
Нет номера строки, нет файла, ничего... трудно что-то отлаживать.
У меня есть предупреждение перед этим, но я не знаю, связано ли это:
ПРЕДУПРЕЖДЕНИЕ в точке входа 'angular-tree-component' содержит глубокий импорт в 'lodash/defaultsDeep', 'lodash/get', 'lodash/omit', 'lodash/isNumber', 'lodash/first', 'lodash/last', 'lodash/some', 'lodash/every', 'lodash/compact', 'lodash/find', 'lodash/isString', 'lodash/isFunction', 'lodash/throttle', 'lodash/includes', 'lodash/ забрать. Это, вероятно, не проблема, но может привести к неправильной компиляции точек входа.
Есть идеи?
6 ответов
Проблема в том, что где-то в вашем приложении вы используете @Input
декоратор вместе с одним из декораторов запросов (@ContentChild
, @ContentChildren
, @ViewChild
, @ViewChildren
, @Query
). Эта комбинация декораторов на самом деле не имеет смысла и может помешать компилятору правильно анализировать ваш код, поэтому вы получаете ошибку Cannot combine @Input decorators with query decorators
,
Посмотрите свой код и удалите каждый @Input
декоратор из членов, к которым применен декоратор запросов. Кроме того, вы можете проверить, все ли сторонние библиотеки совместимы с angular 8.0.0.
У меня была такая же ошибка в проекте, и я обнаружил, что версия ng-bootstrap в моем package.json была 3.0.0, а угловая версия - 8.0.
Я обновил библиотеку ng-bootstrap до 5.0.0, и проблема решена.
По сути, это произошло из-за несовпадения версий библиотеки, вы также можете поискать в этом направлении...
При обновлении до Angular 9 я получил ту же ошибку, ответственный код этой ошибки для меня был следующим:
@Input() @ContentChild(Component) actions: Component;
Проблема в том, что я не могу совмещать @Input()
а также @ContentChild
, поэтому я заменил код, ответственный за ошибку, следующим:
get actions(): Component {
return this._actions;
}
private _actions: Component;
@Input()
set actions(value: Component) {
this._actions = value;
}
@ContentChildren(Component)
set viewActions(value: Component) {
if (!this._actions && value) {
this._actions = value;
}
}
У меня была аналогичная проблема, и единственный способ запустить приложение Angular - это отключить вредоносный код в библиотеке начальной загрузки.
Я закомментировал ссылки на модуль рейтингов: - NgbRatingModule в файле node_modules/@ng-bootstrap/ng-bootstrap/index.js.
@Obaid Наверное, это верно, но я не смог найти конфликт.
Моя проблема заключалась в том, что я по ошибке поставил несколько декораторов запросов, как показано ниже.
@ViewChild(DataTableDirective, { static: false })
@ViewChild(DataTableDirective, { static: false })
Так что вопрос решается только удалением одного декоратора.
У меня была такая же проблема с обновлением моего проекта с angular v8 до angular v11. Если это ваш случай, вероятно, вы активировали флаг --force. Мой совет - не делайте этого. Вы проверяете предупреждения, которые он показывает, и решаете их одно за другим. В основном предупреждения означают обновление сторонних библиотек.