'Найдено синтетическое свойство @panelState. Пожалуйста, включите «BrowserAnimationsModule» или «NoopAnimationsModule» в свое приложение. '

148

Я обновил проект Angular 4 с помощью angular-seed и теперь получаю ошибку

Нашел синтетическое свойство @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
  ],
  ...
})
Ploppy
источник
Как я могу проверить, установлен ли он на ПК или нет.?
Господин по всему миру
2
npm list --depth=0выводит список установленных пакетов в вашем проекте
Ploppy
1
Каков ожидаемый результат, если он уже установлен? я могу видеть только эти 2:├── @angular/platform-browser@4.3.5 ├── @angular/platform-browser-dynamic@4.3.5
Мистер по всему миру
7
Я установил все пакеты для анимации, а также импортировал «BrowserAnimationsModule» в AppModule. Но все равно получаю ошибку.
CrossRT
1
@crossRT. Вы также импортировали анимацию, если создали ее в другом файле?
Плоппи
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
Абсолютно. Но между тем, для тех, кто застрял на месте и нашел только совет выше, мой ответ дает вам еще одну попытку.
Ward
1
Я также получил эту вводящую в заблуждение ошибку (используя угловой 7.1)
Анди-Ло
1
Я использую Angular 8.0.0 и получаю это исключение, но определяю анимацию в компоненте, как вы сказали, все исправлено, спасибо.
Алиреза
1
То же самое с @Alireza, я получил ту же ошибку на Angular 8.0. Включены анимации в компоненте работ.
trungk18
19

Я столкнулся с аналогичными проблемами, когда я пытался использовать BrowserAnimationsModule. Следующие шаги решили мою проблему:

  1. Удалите node_modules реж
  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 .

wodzu
источник
2
Спасибо за эту информацию ... Я ценю, что это новый релиз Angular, но это похоже на бесконечную борьбу, чтобы обойти проблему за проблемой, и наткнуться на обходные пути, подобные этим. Это серьезно недружелюбный пользователь.
Майк Гледхилл,
@MikeGledhill Да, они, конечно же, полностью упустили возможность упростить обновление за последний год. Это был несчастный опыт.
Джексон Брей,
как я узнал сегодня, эта проблема возникает, только если ваш проект основан на угловом начальном семени. новый угловой cli не использует этот тип конфигурационного файла
wodzu
6

Все, что мне нужно было сделать, это установить

npm install @angular/animations@latest --save  

а затем импортировать

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

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

SamYah
источник
-1; это в основном просто дублирует принятый ответ , который был размещен на пару месяцев раньше, но и пропускает стадию прохождения BrowserAnimationsModuleк @NgModuleдекоратору. Он также практически идентичен ответу Виквинчера, опубликованному несколькими часами ранее.
Марк Амери
4
это не дубликат чьего-либо ответа. мой ответ - то, что я сделал. Декоратор @NgModule определен правильно. виртуальная идентичность складывается в окончательные ответы, сделанные парнем. тебе не нужно отмечать.
SamYah
6

Для меня я пропустил это утверждение в @Component decorator: animations: [yourAnimation]

Как только я добавил это утверждение, ошибки исчезли. (Угловой 6.x)

Говард
источник
На самом деле, есть страница об этом в угловой документации . У меня должен быть RTFM
Александр Жермен
2

Моя проблема заключалась в том, что мой @ angular / platform-browser был на версии 2.3.1

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

Обновление до 4.4.6 сделал трюк и добавил папку / animations в node_modules / @ angular / platform-browser

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%)' }))
            ])
        ]);
    }

Затем вы импортируете этот файл анимации в любой компонент.

В вашем файле component.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>

Но после того, как я снял кронштейн, все заработало нормально (в Angular 9.0.1):

<div @animation></div>
Ale_info
источник
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 install @ angular / animations @ latest --save

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

это работает для меня.

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

Просто добавьте .. import {BrowserAnimationsModule} из '@ angular / platform-browser / animations';

импорт: [.. BrowserAnimationsModule

],

в файле app.module.ts.

убедитесь, что вы установили .. npm install @ angular / animations @ latest --save

Saurav
источник
-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
Пожалуйста, предоставьте объяснение вашего кода. Публикация кода самостоятельно не помогает никому, кроме OP, и они не понимают, почему он работает (или не работает).
jhpratt
Хотя этот фрагмент кода может решить проблему, он не объясняет, почему и как он отвечает на вопрос. Пожалуйста, включите объяснение вашего кода, так как это действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин, по которым вы предлагаете код
Балагурунатан Маримуту
-1; это просто дублирует контент из принятого ответа.
Марк Амери