私はリストがある場所にあります。このようなアニメーションがあります。
_<li @animation>
_
そしてこれは私のアニメーショントリガーです:
_trigger('animation', [
transition(':enter', [
style({ height: '0px', 'padding-top': '0', 'padding-bottom': '0'}), // initial
animate('0.5s',
style({ height: '*', 'padding-top': '*', 'padding-bottom': '*'})) // final
]),
transition(':leave', [
style({ height: '*', 'padding-top': '*', 'padding-bottom': '*', opacity: 1}), // initial
animate('0.5s',
style({ height: '0px', 'padding-top': '0', 'padding-bottom': '0', opacity: 0})) // final
])
])
_
特定のアイテムのためにこのアニメーションを条件付きで/オフにするにはどうすればよいですか?実際にはsthを探します。このような:
_<li [@animation]=item.isAnimated>
_
これはまったく機能しません。
そして残念ながらAngularドキュメントはこれについての文を持っています:
ページを入力または終了する要素(DOMから挿入または削除された)には、アニメーションを条件付きで作成できます。たとえば、HTMLテンプレートのアニメーショントリガーで* NGIFを使用します。
しかし、アニメーション注釈を* NGIFと組み合わせると、アニメーション化されていないアイテムは明らかに全く表示されません。
_<li *ngIf="item.isAnimated" @animation>
_
ISANIMETフラグに関係なく、すべての項目をさらに表示したいです。特定の項目のアニメーションをオン/オフにしたいだけです。
によると 角IO :
TRUEの場合、特別なアニメーション制御バインディング@ .disabledバインディングは、すべてのアニメーションのレンダリングを防ぎます。要素自体のアニメーションを無効にするために要素に@ .disabledバインディング、および要素内の任意の内部アニメーショントリガーを配置します。
次の例は、この機能を使用する方法を示しています。
@Component({
selector: 'my-component',
template: `
<div [@.disabled]="isDisabled">
<div [@childAnimation]="exp"></div>
</div>
`,
animations: [
trigger("childAnimation", [
// ...
])
]
})
class MyComponent {
isDisabled = true;
exp = '...';
}
_
@ .disabledがtrueの場合、@ChildAnimationトリガーがインナーアニメーションと一緒にアニメートするのを防ぎます。
が明確にするには: angulars :ENTER および:残りキーワードは、ある場合はコンポーネントをアニメートすることです。 - またはの入り口 DOM。シンプルに聞こえますが、それはあなたのアプローチとあなたが達成しようとする目的の問題です。アニメーションの代わりに.
アプローチは次のとおりです。
@Component({
animations: [
trigger('animation', [
state('invisible', style({ height: '0px', 'padding-top': '0', 'padding-bottom': '0'}),
state('visible', style({ height: '*', 'padding-top': '*', 'padding-bottom': '*'})
transition('invisible => visible', animate('0.5s'))
transition('visible => invisible', animate('0.5s'))
])
],
})
private readonly isAnimated: boolean = false/true //Where ever you get this value.
public animationState: string //Or Enum with visible/invisible.
public ngOnInit(): void {
if (this.isAnimated) {
animationState = 'visible'
}
}
public ngOnDestroy(): void {
if (this.isAnimated && this.animationState === 'visible') {
animationState = 'invisible'
}
}
_
<li [@animation]="animationState"/>
_
このアプローチの問題や問題がある場合 - 私に知らせて、調整して議論することができます。