'Знайдено синтетичну властивість @panelState. Будь ласка, включіть у свою заявку або "BrowserAnimationsModule", або "NoopAnimationsModule". "


148

Я модернізував проект Angular 4 за допомогою кутового насіння і тепер отримаю помилку

Знайдено синтетичну властивість @panelState. Будь ласка, включіть у свою заявку або "BrowserAnimationsModule", або "NoopAnimationsModule".

Знімок екрана помилки

Як я можу це виправити? Що саме мені повідомляє повідомлення про помилку?


1
Допомогли мені - github.com/mgechev/angular-seed/issues/1880
FugueWeb

Відповіді:


227

Переконайтесь, що @angular/animationsпакет встановлений (наприклад, запустивши npm install @angular/animations). Потім у вашому app.module.ts

import { BrowserAnimationsModule } from '@angular/platform-browser/animations';

@NgModule({
  ...,
  imports: [
    ...,
    BrowserAnimationsModule
  ],
  ...
})

Як я можу перевірити, встановлений він на ПК чи ні.?
Містер у всьому світі

2
npm list --depth=0перелічує встановлені пакети вашого проекту
Ploppy

1
Який очікуваний результат, якщо він уже встановлений? я бачу лише ці 2:├── @angular/platform-browser@4.3.5 ├── @angular/platform-browser-dynamic@4.3.5
Пан у всьому світі

7
Я встановив усі пакети для анімації, а також імпортував "BrowserAnimationsModule" в AppModule. Але це все-таки отримує помилку.
перехрестьТР

1
@crossRTDі ви також імпортували свою анімацію, якщо ви створили її в іншому файлі?
Плепі

165

Це повідомлення про помилку часто вводить в оману .

Ви можете забули імпортувати BrowserAnimationsModule. Але це не було моєю проблемою . Я імпортував BrowserAnimationsModuleу корінь AppModule, як і всі.

Проблема була в чомусь абсолютно не пов'язаному з модулем. Я анімував *ngIfу шаблоні компонентів, але забув згадати його в @Component.animations класі для компонента .

@Component({
  selector: '...',
  templateUrl: './...',
  animations: [myNgIfAnimation] // <-- Don't forget!
})

Якщо ви використовуєте анімацію в шаблоні, ви також повинні кожен раз перераховувати цю анімацію у animationsметаданих компонента .


Ви повинні використовувати стару версію Angular, помилка інша:Error: The provided animation trigger "myAnimation" has not been registered!
Ploppy

2
Абсолютно. Але тим часом, для тих, хто застряг, як я, і знаходячи лише поради, наведені вище, моя відповідь дає вам ще одну справу.
Уорд

1
Я також отримав цю оманливу помилку (використовуючи кутовий 7.1)
Анді-ло

1
Я використовую Angular 8.0.0 і отримую це виключення, але визначаючи анімацію в компоненті, як ви сказали, все виправлено, дякую.
Аліреза

1
Так само і з @Alireza, я отримав таку ж помилку на Angular 8.0. Включені анімації в компонент працює.
trungk18

19

У мене виникли подібні проблеми, коли я намагався використати BrowserAnimationsModule. Наступні кроки вирішили мою проблему:

  1. Видаліть nir_modules dir
  2. Очистіть кеш пакету за допомогою npm cache clean
  3. Виконайте одну з цих двох перерахованих тут команд, щоб оновити існуючі пакети

Якщо у вас виникли 404 помилки на кшталт

http://.../node_modules/@angular/platform-browser/bundles/platform-browser.umd.js/animations

додати mapв систему system.config.js такі записи :

'@angular/animations': 'node_modules/@angular/animations/bundles/animations.umd.min.js',
'@angular/animations/browser':'node_modules/@angular/animations/bundles/animations-browser.umd.js',
'@angular/platform-browser/animations': 'node_modules/@angular/platform-browser/bundles/platform-browser-animations.umd.js'

naveedahmed1 забезпечив рішення цього питання про github .


2
Дякую за цю інформацію ... Я вдячний, що це новий випуск Angular, але це відчувається як нескінченна боротьба за те, щоб обійти проблему після випуску, і наткнутися на подібні робочі кола. Це серйозно непривітні для користувача речі.
Майк Гледхілл

@MikeGledhill Yup, вони, безумовно, повністю смоктали, щоб полегшити оновлення за останній рік. Це був нещасний досвід.
Джексон Брей

як я з'ясував сьогодні, це питання виникає лише в тому випадку, якщо ваш проект базується на кутовому наборі швидкого запуску. новий кутовий кліп не використовує такий файл конфігурації
wodzu

6

Все, що мені потрібно було зробити, це встановити це

npm install @angular/animations@latest --save  

а потім імпортувати

import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; 

у ваш app.module.tsфайл.


-1; це здебільшого просто дублює прийняту відповідь, яку було опубліковано на пару місяців раніше, але також пропускає крок переходу BrowserAnimationsModuleдо @NgModuleдекоратора. Це також практично ідентично відповіді vikvincer, опублікованій на кілька годин раніше.
Марк Амері

4
це не дублікат відповіді кого-небудь. моя відповідь - те, що я зробив. @NgModule decorator - це правильно. віртуальний ідентичний додає до переконливих відповідей хлопця. вам не потрібно прапор.
SamYah


2

Моя проблема полягала в тому, що мій @ angular / platform-browser був у версії 2.3.1

npm install @angular/platform-browser@latest --save

Оновлення до 4.4.6 зробило трюк та додало папку / анімації під node_modules / @ angular / platform-browser


І це також закінчило оновлення всього мого кутового проекту до 4.4.6
Tanel Jõeäär

2

Після встановлення модуля анімації ви створюєте файл анімації всередині папки додатків.

router.animation.ts

import { animate, state, style, transition, trigger } from '@angular/animations';
    export function routerTransition() {
        return slideToTop();
    }

    export function slideToRight() {
        return trigger('routerTransition', [
            state('void', style({})),
            state('*', style({})),
            transition(':enter', [
                style({ transform: 'translateX(-100%)' }),
                animate('0.5s ease-in-out', style({ transform: 'translateX(0%)' }))
            ]),
            transition(':leave', [
                style({ transform: 'translateX(0%)' }),
                animate('0.5s ease-in-out', style({ transform: 'translateX(100%)' }))
            ])
        ]);
    }

    export function slideToLeft() {
        return trigger('routerTransition', [
            state('void', style({})),
            state('*', style({})),
            transition(':enter', [
                style({ transform: 'translateX(100%)' }),
                animate('0.5s ease-in-out', style({ transform: 'translateX(0%)' }))
            ]),
            transition(':leave', [
                style({ transform: 'translateX(0%)' }),
                animate('0.5s ease-in-out', style({ transform: 'translateX(-100%)' }))
            ])
        ]);
    }

    export function slideToBottom() {
        return trigger('routerTransition', [
            state('void', style({})),
            state('*', style({})),
            transition(':enter', [
                style({ transform: 'translateY(-100%)' }),
                animate('0.5s ease-in-out', style({ transform: 'translateY(0%)' }))
            ]),
            transition(':leave', [
                style({ transform: 'translateY(0%)' }),
                animate('0.5s ease-in-out', style({ transform: 'translateY(100%)' }))
            ])
        ]);
    }

    export function slideToTop() {
        return trigger('routerTransition', [
            state('void', style({})),
            state('*', style({})),
            transition(':enter', [
                style({ transform: 'translateY(100%)' }),
                animate('0.5s ease-in-out', style({ transform: 'translateY(0%)' }))
            ]),
            transition(':leave', [
                style({ transform: 'translateY(0%)' }),
                animate('0.5s ease-in-out', style({ transform: 'translateY(-100%)' }))
            ])
        ]);
    }

Потім ви імпортуєте цей файл анімації на будь-який ваш компонент.

У файлі компонент.ts

import { routerTransition } from '../../router.animations';

@Component({
  selector: 'app-test',
  templateUrl: './test.component.html',
  styleUrls: ['./test.component.scss'],
  animations: [routerTransition()]
})

Не забудьте імпортувати анімацію у ваш app.module.ts

import { BrowserAnimationsModule } from '@angular/platform-browser/animations';

2

Анімацію слід застосувати до конкретного компонента.

EX: Використання директиви анімації в іншому компоненті та наданої в іншому.

CompA --- @Component ({



анімації: [анімація]}) CompA --- @Component ({



анімації: [анімація] <=== це слід надати у використаному компоненті})


1

Для мене це було тому, що я помістив ім’я анімації всередину квадратних дужок.

<div [@animation]></div>

Але після того, як я зняв кронштейн, все працювало нормально (У кутовій 9.0.1):

<div @animation></div>

0

Я отримав нижче помилку:

Found the synthetic property @collapse. Please include either "BrowserAnimationsModule" or "NoopAnimationsModule" in your application.

Я дотримуюсь прийнятої відповіді Плоппі, і це вирішило мою проблему.

Ось такі кроки:

1.
    import { trigger, state, style, transition, animate } from '@angular/animations';
    Or 
    import { BrowserAnimationsModule } from '@angular/platform-browser/animations';

2. Define the same in the import array in the root module.

Це дозволить усунути помилку. Щасливе кодування !!


-3

Спробуйте це

npm встановити @ angular / animations @ latest - зберегти

імпортувати {BrowserAnimationsModule} з '@ angular / platform-browser / animations';

це працює для мене.


-1; це здебільшого просто дублює прийняту відповідь, яку було опубліковано на пару місяців раніше, але також пропускає крок переходу BrowserAnimationsModuleдо @NgModuleдекоратора.
Марк Амері

-3

Просто додайте .. імпорт {BrowserAnimationsModule} з '@ angular / platform-browser / animations';

імпорт: [.. BrowserAnimationsModule

],

у файлі app.module.ts.

переконайтесь, що ви встановили .. npm install @ angular / animations @ latest --save


-1 для дублювання вмісту, який уже є у багатьох інших відповідях.
Марк Амері

-3

Оновлення для angularJS 4:

Помилка: (SystemJS) XHR помилка (404 не знайдено) при завантаженні http: // localhost: 3000/node_modules/@angular/platform-browser/bundles/platform-browser.umd.js/animations

Рішення:

**cli:** (command/terminal)
npm install @angular/animations@latest --save

**systemjs.config.js** (edit file)
'@angular/animations': 'npm:@angular/animations/bundles/animations.umd.js',
'@angular/animations/browser': 'npm:@angular/animations/bundles/animations-browser.umd.js',
'@angular/platform-browser/animations': 'npm:@angular/platform-browser/bundles/platform-browser-animations.umd.js',

**app.module.ts** (edit file)
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
@NgModule({
  imports:      [ BrowserModule,BrowserAnimationsModule ],
...

2
-1; "angularJS 4" - це не річ, і незрозуміло, що саме ви намагаєтеся висловити тут, оскільки ви просто надаєте повідомлення про помилку та важко читаний блок коду, не так багато пояснення.
Марк Амері

-3
--
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
---

@NgModule({
  declarations: [   --   ],
  imports: [BrowserAnimationsModule],
  providers: [],
  bootstrap: []
})

2
Будь ласка, надайте пояснення для свого коду. Розміщення коду самостійно не допомагає нікому, крім ОП, і вони не розуміють, чому це працює (чи ні).
jhpratt

Хоча цей фрагмент коду може вирішити проблему, він не пояснює, чому або як він відповідає на питання. Додайте пояснення до свого коду, оскільки це дійсно допомагає покращити якість вашої публікації. Пам’ятайте, що ви відповідаєте на запитання читачів у майбутньому, і ці люди можуть не знати причини вашої пропозиції щодо коду
Balagurunathan Marimuthu

-1; це просто дублює вміст із прийнятої відповіді.
Марк Амері
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.