'Znaleziono syntetyczną właściwość @panelState. W aplikacji należy uwzględnić „BrowserAnimationsModule” lub „NoopAnimationsModule”. '

148

Zaktualizowałem projekt Angular 4 za pomocą angular-seed i teraz otrzymuję błąd

Znaleziono właściwość syntetyczną @panelState. W aplikacji uwzględnij „BrowserAnimationsModule” lub „NoopAnimationsModule”.

Zrzut ekranu błędu

Jak mogę to naprawić? Co dokładnie mówi mi komunikat o błędzie?

Aravind
źródło

Odpowiedzi:

227

Upewnij się, że @angular/animationspakiet jest zainstalowany (np. Przez uruchomienie npm install @angular/animations). Następnie w pliku app.module.ts

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

@NgModule({
  ...,
  imports: [
    ...,
    BrowserAnimationsModule
  ],
  ...
})
Ploppy
źródło
Jak mogę sprawdzić, czy jest zainstalowany na komputerze PC, czy nie.?
Pan na całym świecie
2
npm list --depth=0wyświetla listę pakietów zainstalowanych w twoim projekcie
Ploppy
1
Jaki jest oczekiwany wynik, jeśli jest już zainstalowany.? widzę tylko te 2:├── @angular/[email protected] ├── @angular/[email protected]
Pan na całym świecie
7
Zainstalowałem wszystkie pakiety do animacji, a także zaimportowałem „BrowserAnimationsModule” do AppModule. Ale nadal pojawia się błąd.
crossRT
1
@crossRTCzy zaimportowałeś również animację, jeśli utworzyłeś ją w innym pliku?
Ploppy
165

Ten komunikat o błędzie często wprowadza w błąd .

Być może zapomniałeś zaimportować BrowserAnimationsModule. Ale to nie był mój problem . Importowałem BrowserAnimationsModulew katalogu głównym AppModule, tak jak wszyscy powinni.

Problem był czymś zupełnie niezwiązanym z modułem. Animowałem plik *ngIfw szablonie komponentów, ale zapomniałem o tym wspomnieć w @Component.animations klasie komponentów .

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

Jeśli używasz animacji w szablonie, musisz również umieścić tę animację w animationsmetadanych komponentu ... za każdym razem .

Oddział
źródło
Musisz używać starej wersji Error: The provided animation trigger "myAnimation" has not been registered!
Angulara
2
Absolutnie. Ale w międzyczasie, dla tych, którzy utknęli tak jak ja i znajdując tylko powyższe rady, moja odpowiedź daje wam jeszcze jedną rzecz do wypróbowania.
Ward
1
Otrzymałem również ten wprowadzający w błąd błąd (używając kątowego 7.1)
Andi-lo
1
Używam Angular 8.0.0 i otrzymuję ten wyjątek, ale zdefiniowanie animacji w komponencie, jak powiedziałeś, naprawiło wszystko, dzięki.
Alireza
1
To samo z @Alireza, mam ten sam błąd w Angular 8.0. Zawarte animacje w komponencie działa.
trungk18
19

Napotkałem podobne problemy, gdy próbowałem użyć BrowserAnimationsModule. Poniższe kroki rozwiązały mój problem:

  1. Usunięcie node_modules reż
  2. Wyczyść pamięć podręczną pakietów za pomocą npm cache clean
  3. Uruchom jedno z tych dwóch poleceń wymienionych tutaj, aby zaktualizować istniejące pakiety

Jeśli wystąpią błędy 404, takie jak

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

dodaj następujące wpisy do mapw swoim 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 dostarczył rozwiązanie tego problemu na githubie .

wodzu
źródło
2
Dzięki za te informacje ... Doceniam to, że jest to nowe wydanie Angulara, ale wydaje mi się, że to niekończąca się walka z omijaniem problemu po numerze i natknięciem się na takie obejścia. To naprawdę nieprzyjazne dla użytkownika rzeczy.
Mike Gledhill,
@MikeGledhill Tak, z pewnością byli do niczego w ułatwianiu aktualizacji w ciągu ostatniego roku. To było nieszczęśliwe doświadczenie.
Jackson Bray,
jak się dzisiaj dowiedziałem, ten problem występuje tylko wtedy, gdy projekt jest oparty na kątowym zarodku przewodnika Szybki start. nowa
angular
6

Wszystko, co musiałem zrobić, to zainstalować to

npm install @angular/animations@latest --save  

a następnie importuj

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

do app.module.tspliku.

SamYah
źródło
-1; to przeważnie tylko powiela odpowiedź przyjmuje się, że został opublikowany kilka miesięcy wcześniej, ale też strzela się etap przechodzenia BrowserAnimationsModuledo @NgModuledekoratora. Jest również praktycznie identyczny z odpowiedzią vikvincera opublikowaną kilka godzin wcześniej.
Mark Amery,
4
nie jest to kopia niczyjej odpowiedzi. moja odpowiedź brzmi, co zrobiłem. Dekorator @NgModule jest zdecydowanie poprawny. wirtualny identyczny składa się na rozstrzygające odpowiedzi mego faceta. Nie musisz zgłaszać.
SamYah
6

W moim przypadku brakowało mi tego stwierdzenia w dekoratorze @Component: animations: [yourAnimation]

Po dodaniu tego oświadczenia błędy zniknęły. (Angular 6.x)

Howard
źródło
Właściwie jest strona o tym w dokumentacji kątowej . Powinienem mieć RTFM
Alexandre Germain
2

Mój problem polegał na tym, że moja przeglądarka @ angular / platform-browser była w wersji 2.3.1

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

Aktualizacja do 4.4.6 załatwiła sprawę i dodano folder / animations w node_modules / @ angular / platform-browser

Tanel Jõeäär
źródło
To również zakończyło się aktualizacją całego projektu Angular do wersji 4.4.6
Tanel Jõeäär
2

Po zainstalowaniu modułu animacji utwórz plik animacji w folderze aplikacji.

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

Następnie importujesz ten plik animacji do dowolnego komponentu.

W pliku component.ts

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

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

Nie zapomnij zaimportować animacji do pliku app.module.ts

import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
Chandrahasa Rai
źródło
2

Animację należy zastosować na konkretnym komponencie.

EX: Użycie dyrektywy animacji w innym komponencie i udostępnionej w innym.

CompA --- @Component ({



animations: [animacja]}) CompA --- @Component ({



animacje: [animacja] <=== to powinno być podane w używanym komponencie})

Nanda Kishore Allu
źródło
1

Dla mnie było tak, ponieważ umieściłem nazwę animacji w nawiasach kwadratowych.

<div [@animation]></div>

Ale po usunięciu wspornika wszystko działało dobrze (w Angular 9.0.1):

<div @animation></div>
Ale_info
źródło
0

Mam poniżej błąd:

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

Postępuję zgodnie z odpowiedzią zaakceptowaną przez Ploppy i to rozwiązało mój problem.

Oto kroki:

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.

To rozwiąże problem. Miłego kodowania !!

Trilok Pathak
źródło
-3

Spróbuj tego

npm install @ angular / animations @ latest --save

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

to działa dla mnie.

vikvincer
źródło
-1; to przeważnie tylko powiela odpowiedź przyjmuje się, że został opublikowany kilka miesięcy wcześniej, ale też strzela się etap przechodzenia BrowserAnimationsModuledo @NgModuledekoratora.
Mark Amery,
-3

Po prostu dodaj ... importuj {BrowserAnimationsModule} z '@ angular / platform-browser / animations';

import: [.. BrowserAnimationsModule

],

w pliku app.module.ts.

upewnij się, że masz zainstalowany .. npm install @ angular / animations @ latest --save

Saurav
źródło
-1 za powielanie treści, które są już w wielu innych odpowiedziach tutaj.
Mark Amery,
-3

Aktualizacja dla angularJS 4:

Błąd: (SystemJS) błąd XHR (404 nie znaleziono) ładowanie http: // localhost: 3000/node_modules/@angular/platform-browser/bundles/platform-browser.umd.js/animations

Rozwiązanie:

**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 ],
...
Eman Jayme
źródło
2
-1; „angularJS 4” nie jest rzeczą i nie jest jasne, co dokładnie próbujesz tutaj wyrazić, ponieważ podajesz tylko komunikat o błędzie i trudny do odczytania blok kodu bez choćby zdania wyjaśnienia.
Mark Amery,
-3
--
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
---

@NgModule({
  declarations: [   --   ],
  imports: [BrowserAnimationsModule],
  providers: [],
  bootstrap: []
})
Girish
źródło
2
Podaj wyjaśnienie swojego kodu. Samo publikowanie kodu nie pomaga nikomu poza OP, a oni nie rozumieją, dlaczego to działa (lub nie).
jhpratt
Chociaż ten fragment kodu może rozwiązać problem, nie wyjaśnia, dlaczego ani jak odpowiada na pytanie. Dołącz wyjaśnienie swojego kodu, ponieważ naprawdę pomaga to poprawić jakość Twojego postu. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a ci ludzie mogą nie znać powodów, dla których zaproponowałeś kod
Balagurunathan Marimuthu
-1; to tylko powiela treść z zaakceptowanej odpowiedzi.
Mark Amery,