'Encontrou a propriedade sintética @panelState. Inclua "BrowserAnimationsModule" ou "NoopAnimationsModule" em seu aplicativo. '

148

Atualizei um projeto Angular 4 usando angular-seed e agora recebo o erro

Encontrada a propriedade sintética @panelState. Inclua "BrowserAnimationsModule" ou "NoopAnimationsModule" em seu aplicativo.

Captura de tela do erro

Como posso consertar isso? O que exatamente a mensagem de erro está me dizendo?

Aravind
fonte

Respostas:

227

Verifique se o @angular/animationspacote está instalado (por exemplo, executando npm install @angular/animations). Em seguida, no seu app.module.ts

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

@NgModule({
  ...,
  imports: [
    ...,
    BrowserAnimationsModule
  ],
  ...
})
Ploppy
fonte
Como posso verificar se está instalado no PC ou não.?
Mr world wide
2
npm list --depth=0lista os pacotes instalados no seu projeto
Ploppy
1
Qual é o resultado esperado se já estiver instalado.? só consigo ver estes 2:├── @angular/[email protected] ├── @angular/[email protected]
Mr world wide
7
Instalei todos os pacotes para animação e também importei "BrowserAnimationsModule" no AppModule. Mas ainda está recebendo o erro.
crossRT
1
@crossRTVocê também importou sua animação se a criou em um arquivo diferente?
Ploppy
165

Essa mensagem de erro geralmente é enganosa .

Você pode ter esquecido de importar o arquivo BrowserAnimationsModule. Mas esse não era meu problema . Eu estava importando BrowserAnimationsModulena raiz AppModule, como todos deveriam fazer.

O problema era algo completamente não relacionado ao módulo. Eu estava animando um *ngIfno modelo de componente, mas havia esquecido de mencioná-lo na @Component.animations classe for do componente .

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

Se você usar uma animação em um modelo, também deverá listá-la nos animationsmetadados do componente ... sempre .

enfermaria
fonte
Você deve estar usando uma versão antiga do Angular, o erro é diferente:Error: The provided animation trigger "myAnimation" has not been registered!
Ploppy
2
Absolutamente. Enquanto isso, para aqueles que estão presos e encontrando apenas os conselhos acima, minha resposta dá mais uma coisa para você tentar.
Ward
1
Eu também recebi esse erro enganoso (usando o angular 7.1)
Andi-lo
1
Estou usando o Angular 8.0.0 e recebo essa exceção, mas definindo a animação no componente como você disse que corrigiu tudo, obrigado.
Alireza
1
Mesmo com @Alireza, recebi o mesmo erro no Angular 8.0. Animações incluídas nos trabalhos do componente.
trungk18
19

Corri para problemas semelhantes, quando tentei usar o BrowserAnimationsModule. As etapas a seguir resolveram meu problema:

  1. Exclua o diretório node_modules
  2. Limpe o cache do pacote usando npm cache clean
  3. Execute um desses dois comandos listados aqui para atualizar seus pacotes existentes

Se você encontrar erros 404, como

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

adicione as seguintes entradas mapno seu 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 forneceu a solução para esta questão do github .

wodzu
fonte
2
Obrigado por essas informações ... Agradeço que este seja um novo lançamento do Angular, mas parece uma luta sem fim para solucionar problemas após problemas e tropeçar em soluções alternativas como essas. São coisas seriamente hostis para o usuário.
Mike Gledhill
@ MikeGledhill Yup, eles certamente foram uma porcaria em tornar as coisas fáceis de atualizar durante o ano passado. Tem sido uma experiência miserável.
Jackson Bray
Como descobri hoje, esse problema ocorre apenas se o seu projeto for baseado na semente do início rápido angular. o novo cli angular não usa esse tipo de arquivo de configuração
wodzu
6

Tudo o que eu precisava fazer era instalar este

npm install @angular/animations@latest --save  

e depois importe

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

no seu app.module.tsarquivo.

SamYah
fonte
-1; isso na maioria das vezes duplica a resposta aceita postada alguns meses antes, mas também perde a etapa de passar BrowserAnimationsModulepara o @NgModuledecorador. É também praticamente idêntica à resposta de vikvincer postou algumas horas antes.
Mark Amery
4
não é uma duplicata da resposta de ninguém. minha resposta é o que eu fiz. O decorador do @NgModule está correto. virtual idêntico resulta em respostas conclusivas para um cara. você não precisava sinalizar.
SamYah
6

Para mim, eu perdi esta declaração no decorador de componentes: animações: [yourAnimation]

Depois de adicionar esta declaração, os erros desapareceram. (Angular 6.x)

Howard
fonte
Na verdade, há uma página sobre isso na documentação angular . Eu deveria ter RTFM
Alexandre Germain
2

Meu problema era que meu navegador @ angular / platform estava na versão 2.3.1

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

A atualização para 4.4.6 fez o truque e a pasta adicionou / animações em node_modules / @ angular / platform-browser

Tanel Jõeäär
fonte
E isso também acabou atualizando todo o meu projeto Angular para 4.4.6 #
Tanel Jõeäär
2

Depois de instalar um módulo de animação, você cria um arquivo de animação dentro da pasta do aplicativo.

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

Então você importa esse arquivo de animação para qualquer componente.

No seu arquivo component.ts

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

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

Não se esqueça de importar a animação no seu app.module.ts

import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
Chandrahasa Rai
fonte
2

A animação deve ser aplicada no componente específico.

EX: Usando a diretiva de animação em outro componente e fornecida em outro.

CompA --- @Component ({



animações: [animação]}) CompA --- @Component ({



animações: [animação] <=== isso deve ser fornecido no componente usado})

Nanda Kishore Allu
fonte
1

Para mim foi porque coloquei o nome da animação entre colchetes.

<div [@animation]></div>

Mas depois que removi o suporte, tudo funcionou bem (no Angular 9.0.1):

<div @animation></div>
Ale_info
fonte
0

Eu fiquei abaixo do erro:

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

Sigo a resposta aceita pelo Ploppy e ele resolveu o meu problema.

Aqui estão os passos:

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.

Isso resolverá o erro. Feliz codificação !!

Trilok Pathak
fonte
-3

Tente isto

npm install @ angular / animações @ mais recentes --save

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

isso funciona para mim.

vikvincer
fonte
-1; isso na maioria das vezes duplica a resposta aceita postada alguns meses antes, mas também perde a etapa de passar BrowserAnimationsModulepara o @NgModuledecorador.
Mark Amery
-3

Basta adicionar .. import {BrowserAnimationsModule} de '@ angular / platform-browser / animations';

importações: [.. BrowserAnimationsModule

],

no arquivo app.module.ts.

verifique se você instalou .. npm install @ angular / animations @ latest --save

Saurav
fonte
-1 para duplicar o conteúdo que já contém muitas outras respostas aqui.
Mark Amery
-3

Atualização para angularJS 4:

Erro: erro XHR (SystemJS) (404 não encontrado) ao carregar http: // localhost: 3000/node_modules/@angular/platform-browser/bundles/platform-browser.umd.js/animations

Solução:

**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
fonte
2
-1; "angularJS 4" não é uma coisa, e não está claro o que exatamente você está tentando expressar aqui, pois você apenas fornece uma mensagem de erro e um bloco de código difícil de ler sem nem uma frase explicativa.
Mark Amery
-3
--
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
---

@NgModule({
  declarations: [   --   ],
  imports: [BrowserAnimationsModule],
  providers: [],
  bootstrap: []
})
Girish
fonte
2
Forneça uma explicação para o seu código. A publicação de código por si só não ajuda ninguém, exceto OP, e eles não entendem por que ele funciona (ou não).
Jhpratt # 6/17
Embora esse trecho de código possa resolver o problema, ele não explica por que ou como responde à pergunta. Inclua uma explicação para o seu código, pois isso realmente ajuda a melhorar a qualidade da sua postagem. Lembre-se que você está respondendo a pergunta para os leitores no futuro, e essas pessoas podem não saber as razões para a sua sugestão de código
Balagurunathan Marimuthu
-1; isso apenas duplica o conteúdo da resposta aceita.
Mark Amery