после перехода на угловой 12 все компоненты материала являются «неизвестными элементами»
После обновления до Angular 12, хотя у меня есть весь требуемый код в app.module.ts, все теги материалов не распознаются: например, для mat-checkbox у меня есть следующее в app.module.ts
import { MatCheckboxModule } from '@angular/material/checkbox';
@NgModule({
imports: [
BrowserModule,
MatCheckboxModule,
и при исполнении:
mat-checkbox - неизвестный элемент:
- Если mat-checkbox является компонентом Angular, убедитесь, что он является частью этого модуля.
- Если mat-checkbox является веб-компонентом, добавьте CUSTOM_ELEMENTS_SCHEMA в @NgModule.schemas этого компонента.
И та же проблема для всех тегов материалов (mat-icon, mat-table, mat-label ...).
В предыдущей версии (Angular 9) все было нормально. Спасибо за помощь.
3 ответа
Примечание 1 (фатальная проблема)
Вы используете отложенную загрузку. где-то в вашем проекте у вас есть старый синтаксис ленивой загрузки
{
...
loadChildren: 'path/to/your.module#YourModule'
}
Замените их все в своем проекте на:
{
...
loadChildren: () => import('path/to/your.module').then(m => m.YourModule)
}
Даже если вы думаете, что это не связано с вашей текущей функцией. После этого проблема будет решена.
Заметка 2:
Также во время обновления до Angular12, если некоторые пакеты npm сломаны, вы можете использовать
npm i --save package-name --force
чтобы установить его сейчас.
Заметка 3:
Также, если вы видите некоторые ошибки в файлах ts, вы можете подавить (игнорировать) их, используя
// @ts-ignore
на данный момент поверх строки ошибки.
Примечание 4
Также, если вы видите ошибку типа «Класс использует функции Angular, но не оформлен. Добавьте явный декоратор Angular».
добавлять
@Injectable()
поверх объявления класса.
Примечание 5
По моему мнению, если вы обновляете старую версию angular до angular 12. Для этого сначала создайте проект с
ng new APP_NAME --strict=false
которого у вас пока нет строгого режима. Когда все проблемы решены и у вас есть рабочий проект, вы можете создать новый проект со строгим режимом.
:)-|-<
Я предполагаю, что у вас есть ленивые загруженные модули.
Если да,
создать общий модуль,
импорт и экспорт всего модуля материалов в общий модуль,
импортировать общий модуль в корневой (приложение) модуль и функциональные (ленивые) модули.
Если нет, то, полагаю, вы поступили правильно.
Краткий ответ:
удалите каталог и переустановите их, используя, что в любом случае устанавливает ваши пакеты и предотвращает распространение ошибок на другие пакеты, которые на самом деле не имеют проблемы.
Длинный ответ:
Вы обновляете старую версию angular до angular 12. Для этого сначала создайте проект с
ng new APP_NAME --strict=false
которого у вас пока нет строгого режима.
После этого выполните свою работу по переносу кода в новый проект и установите дополнительные необходимые пакеты.
Затем в конце удалите
node_modules
каталог и
package-lock.json
и переустановите их, используя
npm install --force
который в любом случае устанавливает ваши пакеты и предотвращает распространение ошибок на другие пакеты, которые на самом деле не имеют проблемы.
После этого попробуйте решить существующие проблемы и, при необходимости, обновить некоторые дополнительные пакеты, которые у вас есть в вашем проекте, и так далее.
Когда все проблемы решены и у вас есть рабочий проект, вы можете создать новый проект со строгим режимом. затем прочтите некоторые ссылки о строгом режиме и после этого скопируйте файлы рабочего проекта в новый проект, который имеет строгий режим, и сделайте то, что необходимо для проекта в строгом режиме, пока все проблемы не будут решены.