Невозможно объединить декораторы @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. Мой совет - не делайте этого. Вы проверяете предупреждения, которые он показывает, и решаете их одно за другим. В основном предупреждения означают обновление сторонних библиотек.

Другие вопросы по тегам