@Component
注释为我们提供了animations
属性。这可用于定义triggers
的列表,每个列表都包含大量state
和transition
属性。
将多个动画添加到组件时,此列表可能会变得很长。此外,一些动画也非常适合在其他组件中使用。必须将它们直接放在每个组件中似乎很乏味且重复 - 而且它违反了DRY原则。
您也可以在组件上定义模板和样式属性,但您可以选择提供templateUrl
和styleUrls
。我似乎找不到animationUrls
属性 - 我错过了什么 - 有没有办法做到这一点?
答案 0 :(得分:30)
当然可以。您可以在不同的文件中声明动画,然后将其导入到您需要的地方
animations.ts
export const animation = trigger(...)
component.ts
import { animation } from './animations'
@Component({
animations: [ animation ]
})
或者如果您想使其可配置,您可以导出一个功能。例如,看看Fuel-UI Collapse。这是一个可重用(可配置)的动画
collapse.ts
export function Collapse(duration: number = 300) {
return trigger('collapse', [
...
])
}
然后在您的组件中,只需使用
import { Collapse } from './collapse'
@Component({
animations: [ Collapse(300) ],
template: `
<div @collapse="collapsed ? 'true' : 'false'">
</div>
`
})
class MyComponent {}
答案 1 :(得分:4)
当然可以。你可以制作一个animations.ts
并让它导出所有类型的动画常量:
export const PRETTY_ANIMATION = trigger('heroState', [
state('inactive', style({
backgroundColor: '#eee',
transform: 'scale(1)'
})),
state('active', style({
backgroundColor: '#cfd8dc',
transform: 'scale(1.1)'
})),
transition('inactive => active', animate('100ms ease-in')),
transition('active => inactive', animate('100ms ease-out'))
])
在组件中,您可以使用import
语句导入此动画:
import {PRETTY_ANIMATION} from 'animations';
并将其应用于您的组件:
@Component({
selector : `...`
animations : [PRETTY_ANIMATION]
})
答案 2 :(得分:1)
你当然和绅士们在他的一些github回购示例中这样做了。请采取以下措施:
route_animations.ts
import {
trigger,
animate,
style,
transition
} from '@angular/core';
var startingStyles = (styles) => {
styles['position'] = 'fixed';
styles['top'] = 0;
styles['left'] = 0;
styles['right'] = 0;
styles['height'] = '100%';
return styles;
}
export default function(name) {
return trigger(name, [
transition('void => *', [
style(startingStyles({
transform: 'translateX(100%)'
})),
animate('0.5s ease-out', style({ transform: 'translateX(0%)'}))
]),
transition('* => void', [
style(startingStyles({
transform: 'translateX(0%)'
})),
animate('0.5s ease-in', style({ transform: 'translateX(-100%)'}))
])
]);
}
然后将其导入到如下组件中:
import {default as routerAnimations} from '../route_animations';
然后在初始化组件时在动画Param下调用这个:
animations: [routerAnimations('route')],
亲自看看这个以获得更好的想法,但我希望这会有所帮助。 https://github.com/matsko/ng2eu-2016-code/blob/master
感谢matsko。
答案 3 :(得分:1)
这是我用于动画路线
的Angular 4动画中的另一个淡入淡出示例// import the required animation functions from the angular animations module
import { trigger, state, animate, transition, style } from '@angular/animations';
export const fadeInAnimation =
// trigger name for attaching this animation to an element using the [@triggerName] syntax
trigger('fadeInAnimation', [
// route 'enter' transition
transition(':enter', [
// css styles at start of transition
style({ opacity: 0 }),
// animation and styles at end of transition
animate('.3s', style({ opacity: 1 }))
]),
]);
附带过渡的组件
import { Component } from '@angular/core';
// import fade in animation
import { fadeInAnimation } from '../_animations/index';
@Component({
moduleId: module.id.toString(),
templateUrl: 'home.component.html',
// make fade in animation available to this component
animations: [fadeInAnimation],
// attach the fade in animation to the host (root) element of this component
host: { '[@fadeInAnimation]': '' }
})
export class HomeComponent {
}
更多详情和this post
的现场演示