'发现了合成属性@panelState。请在您的应用程序中包含“ BrowserAnimationsModule”或“ NoopAnimationsModule”。


Answers:


227

确保@angular/animations已安装软件包(例如,通过运行npm install @angular/animations)。然后,在您的app.module.ts中

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

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

如何检查PC上是否已安装?
全球先生

2
npm list --depth=0列出项目中已安装的软件包
Ploppy

1
如果已经安装,预期的结果是什么?我只能看到这些2:├── @angular/platform-browser@4.3.5 ├── @angular/platform-browser-dynamic@4.3.5
世界各地的先生

7
我已经安装了所有用于动画的软件包,并且还在AppModule中导入了“ BrowserAnimationsModule”。但是仍然出现错误。
crossRT

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)
Andi-lo

1
我正在使用Angular 8.0.0并获取该异常,但正如您所说的,在组件中定义动画修复了所有问题,谢谢。
Alireza

1
与@Alireza相同,在Angular 8.0上遇到相同的错误。组件工程中包含的动画。
trungk18 '19

19

尝试使用时,我遇到了类似的问题BrowserAnimationsModule。以下步骤解决了我的问题:

  1. 删除node_modules目录
  2. 使用以下命令清除软件包缓存 npm cache clean
  3. 运行此处列出的这两个命令之一来更新您现有的软件包

如果您遇到404错误,例如

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

mapsystem.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的新版本,但是感觉到问题之间无休止地奋斗着,并在诸如此类的变通方法中tum绊绊。这是严重的用户不友好的东西。
Mike Gledhill

@MikeGledhill是的,在过去的一年中,他们肯定已经完全厌倦了使事情易于升级。真是惨痛的经历。
杰克逊·布雷

正如我今天发现的那样,仅当您的项目基于角度快速入门种子时,才会出现此问题。新的角度cli不使用这种配置文件
wodzu

6

我要做的就是安装这个

npm install @angular/animations@latest --save  

然后导入

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

到您的app.module.ts文件中。


-1; 这大多只是复制了几个月前发布的已接受答案,但也错过了传递BrowserAnimationsModule@NgModule装饰者的步骤。这几乎是相同的vikvincer的答案贴了几个小时前。
马克·阿默里

4
它不是任何人答案的重复。我的回答是我所做的。@NgModule装饰器是def正确的。虚拟相同加在一起得出结论性的答案。你不需要标记。
SamYah

6

对我来说,我在@Component装饰器中错过了这一声明:动画:[yourAnimation]

添加此语句后,错误消失了。(角度6.x)


实际上,角度文档中有关于此的页面。我应该使用RTFM
Alexandre Germain,

2

我的问题是我的@ angular / platform-b​​rowser在2.3.1版上

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

升级到4.4.6可以解决问题,并在node_modules / @ angular / platform-b​​rowser下添加了/ animations文件夹


那也最终将我整个Angular项目升级到4.4.6
TanelJõeäär17-10-23

2

安装动画模块后,您可以在应用程序文件夹中创建一个动画文件。

路由器动画

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>

0

我得到以下错误:

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

我遵循Ploppy接受的答案,它解决了我的问题。

步骤如下:

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-保存

从“ @ angular / platform-b​​rowser / animations”导入{BrowserAnimationsModule};

这对我有用。


-1; 这大多只是复制了几个月前发布的已接受答案,但也错过了传递BrowserAnimationsModule@NgModule装饰者的步骤。
Mark Amery

-3

只需从'@ angular / platform-b​​rowser / animations'添加.. import {BrowserAnimationsModule};

导入:[.. BrowserAnimationsModule

],

在app.module.ts文件中。

确保已安装.. npm install @ angular / animations @ latest --save


-1用于复制此处已包含其他答案的内容。
Mark Amery

-3

更新angularJS 4:

错误:(SystemJS)XHR错误(404未找到)正在加载http:// localhost:3000/node_modules/@angular/platform-b​​rowser/bundles/platform-b​​rowser.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”不是问题,并且不清楚您要在此处确切表达什么,因为您只提供了错误消息和难以理解的代码块,而没有太多解释。
Mark Amery

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

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

2
请提供您的代码说明。单独发布代码对OP之外的任何人都无济于事,他们不了解它为什么起作用(或不起作用)。
jhpratt

尽管此代码段可以解决问题,但并未说明原因或答案。请提供代码说明,因为这确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而那些人可能不知道您提出代码建议的原因
Balagurunathan Marimuthu

-1; 这只是从接受的答案中复制内容。
Mark Amery
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.