'J'ai trouvé la propriété synthétique @panelState. Veuillez inclure "BrowserAnimationsModule" ou "NoopAnimationsModule" dans votre application. "


148

J'ai mis à niveau un projet Angular 4 en utilisant angular-seed et j'obtiens maintenant l'erreur

J'ai trouvé la propriété synthétique @panelState. Veuillez inclure "BrowserAnimationsModule" ou "NoopAnimationsModule" dans votre application.

Capture d'écran de l'erreur

Comment puis-je réparer cela? Que me dit exactement le message d'erreur?


Réponses:


227

Assurez-vous que le @angular/animationspackage est installé (par exemple en exécutant npm install @angular/animations). Ensuite, dans votre app.module.ts

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

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

Comment puis-je vérifier s'il est installé sur un PC ou non.?
Mr world wide

2
npm list --depth=0répertorie les packages installés sur votre projet
Ploppy

1
Quel est le résultat attendu s'il est déjà installé.? je ne peux voir que ces 2:├── @angular/platform-browser@4.3.5 ├── @angular/platform-browser-dynamic@4.3.5
Mr world wide

7
J'ai installé tous les packages pour l'animation et j'ai également importé "BrowserAnimationsModule" dans l'AppModule. Mais il obtient toujours l'erreur.
crossRT

1
@crossRTD avez-vous également importé votre animation si vous l'avez créée dans un autre fichier?
Ploppy

165

Ce message d'erreur est souvent trompeur .

Vous avez peut- être oublié d'importer le fichier BrowserAnimationsModule. Mais ce n'était pas mon problème . J'importais BrowserAnimationsModuleà la racine AppModule, comme tout le monde devrait le faire.

Le problème était quelque chose de totalement indépendant du module. J'animais un *ngIfdans le modèle de composant mais j'avais oublié de le mentionner dans la @Component.animations classe de composant .

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

Si vous utilisez une animation dans un modèle, vous devezanimations également répertorier cette animation dans les métadonnées du composant ... à chaque fois .


Vous devez utiliser une ancienne version d'Angular, l'erreur est différente:Error: The provided animation trigger "myAnimation" has not been registered!
Ploppy

2
Absolument. Mais en attendant, pour ceux qui sont coincés comme moi et ne trouvant que les conseils ci-dessus, ma réponse vous donne encore une chose à essayer.
Ward le

1
J'ai aussi eu cette erreur trompeuse (en utilisant angulaire 7.1)
Andi-lo

1
J'utilise Angular 8.0.0 et j'obtiens cette exception mais en définissant l'animation dans le composant comme vous l'avez dit, tout a été corrigé, merci.
Alireza le

1
Même chose avec @Alireza, j'ai eu la même erreur sur Angular 8.0. Les animations incluses dans les travaux du composant.
trungk18

19

J'ai rencontré des problèmes similaires lorsque j'ai essayé d'utiliser le BrowserAnimationsModule. Les étapes suivantes ont résolu mon problème:

  1. Supprimer les node_modules dir
  2. Effacez le cache de votre package à l'aide de npm cache clean
  3. Exécutez l'une de ces deux commandes répertoriées ici pour mettre à jour vos packages existants

Si vous rencontrez des erreurs 404 comme

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

ajoutez les entrées suivantes mapdans votre 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 a fourni la solution à ce problème github .


2
Merci pour cette information ... J'apprécie qu'il s'agit d'une nouvelle version d'Angular, mais cela ressemble à une lutte sans fin pour contourner problème après problème et tomber sur des solutions de rechange comme celles-ci. Ce sont des trucs vraiment peu conviviaux.
Mike Gledhill le

@MikeGledhill Yup, ils ont certainement complètement aspiré à rendre les choses faciles à mettre à niveau au cours de la dernière année. Cela a été une expérience misérable.
Jackson Bray

comme je l'ai découvert aujourd'hui, ce problème ne se produit que si votre projet est basé sur la graine angular quickstart. le nouveau cli angulaire n'utilise pas ce type de fichier de configuration
wodzu

6

Tout ce que j'avais à faire était d'installer ceci

npm install @angular/animations@latest --save  

puis importez

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

dans votre app.module.tsdossier.


-1; cette plupart du temps juste fait double emploi avec la réponse acceptée qui a été publié quelques mois plus tôt, mais manque aussi l'étape de passage BrowserAnimationsModuleau @NgModuledécorateur. C'est aussi pratiquement identique à la réponse de vikvincer publiée quelques heures plus tôt.
Mark Amery

4
ce n'est pas une réplique de la réponse de quiconque. ma réponse est ce que j'ai fait. Le décorateur @NgModule est par défaut correct. virtuellement identique s'ajoute à des réponses concluantes mon gars. Vous n'avez pas besoin de signaler.
SamYah

6

Pour moi, j'ai manqué cette déclaration dans @Component decorator: animations: [yourAnimation]

Une fois que j'ai ajouté cette déclaration, les erreurs ont disparu. (Angulaire 6.x)


En fait, il y a une page à ce sujet dans la documentation angulaire . Je devrais avoir RTFM
Alexandre Germain

2

Mon problème était que mon navigateur @ angular / platform était sur la version 2.3.1

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

La mise à niveau vers 4.4.6 a fait l'affaire et a ajouté le dossier / animations sous node_modules / @ angular / platform-browser


Et cela a également fini par mettre à niveau tout mon projet Angular vers la version 4.4.6
Tanel Jõeäär

2

Après avoir installé un module d'animation, vous créez un fichier d'animation dans le dossier de votre application.

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

Ensuite, vous importez ce fichier d'animation dans n'importe quel composant.

Dans votre fichier component.ts

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

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

N'oubliez pas d'importer l'animation dans votre app.module.ts

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

2

L'animation doit être appliquée sur le composant spécifique.

EX: Utilisation de la directive d'animation dans un autre composant et fournie dans un autre.

CompA --- @Component ({



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



animations: [animation] <=== ceci doit être fourni dans le composant utilisé})


1

Pour moi, c'est parce que j'ai mis le nom de l'animation entre crochets.

<div [@animation]></div>

Mais après avoir retiré le support, tout a bien fonctionné (dans Angular 9.0.1):

<div @animation></div>

0

J'ai eu une erreur ci-dessous:

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

Je suis la réponse acceptée par Ploppy et cela a résolu mon problème.

Voici les étapes:

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.

Cela résoudra l'erreur. Bon codage !!


-3

Essaye ça

npm install @ angular / animations @ latest --save

importer {BrowserAnimationsModule} depuis '@ angular / platform-browser / animations';

cela fonctionne pour moi.


-1; cette plupart du temps juste fait double emploi avec la réponse acceptée qui a été publié quelques mois plus tôt, mais manque aussi l'étape de passage BrowserAnimationsModuleau @NgModuledécorateur.
Mark Amery

-3

Ajoutez simplement .. import {BrowserAnimationsModule} depuis '@ angular / platform-browser / animations';

importations: [.. BrowserAnimationsModule

],

dans le fichier app.module.ts.

assurez-vous que vous avez installé .. npm install @ angular / animations @ latest --save


-1 pour dupliquer le contenu qui est déjà dans de nombreuses autres réponses ici.
Mark Amery

-3

Mise à jour pour angularJS 4:

Erreur: Erreur (SystemJS) XHR (404 Not Found) chargement de http: // localhost: 3000/node_modules/@angular/platform-browser/bundles/platform-browser.umd.js/animations

Solution:

**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" n'est pas une chose, et on ne sait pas exactement ce que vous essayez d'exprimer ici puisque vous fournissez simplement un message d'erreur et un bloc de code difficile à lire sans même une phrase d'explication.
Mark Amery

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

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

2
Veuillez expliquer votre code. Publier du code à lui seul n'aide personne sauf OP, et ils ne comprennent pas pourquoi cela fonctionne (ou non).
jhpratt

Bien que cet extrait de code puisse résoudre le problème, il n'explique pas pourquoi ni comment il répond à la question. Veuillez inclure une explication de votre code, car cela contribue vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code
Balagurunathan Marimuthu

-1; cela ne fait que dupliquer le contenu de la réponse acceptée.
Mark Amery
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.