2017-04-14 20 views
5

フィールドを持つフォームコンポーネントがあります。フォームに表示されるときにアニメーション化するフィールドがありますが、すべてのフィールドではありません。他の属性と条件2でアニメーションを条件付きで追加する方法

<div *ngFor="let field of form.Fields"> 
    <div [ngSwitch]="field.Type" [@slideOut]> 
     <!-- more field stuff --> 
    </div> 
</div> 

私はこの[attr.required]="field.Required"ような何かを行うことができますが、動作するように[[email protected]]いないようです。

理想的には、自分のフィールドにアニメーションプロパティを設定したいので、このようなアニメーションを渡すことができますが、[@field.Animation]のようなものを渡すことができます。何か案は?

+0

あなたのslideOutのあなたのアニメーションの状態は? [@slideOut] = ""または同様のものを使用する必要があります。ここでは、state_nameは動的に(たとえば名前を返すメソッド経由で)静的に(たとえばハードコーディングされた文字列で)判定できます。 – danimal

+0

それは今、slideOutはvoid => *アニメーションです。 – Devcon

+0

次に、set [@slideOut] = "'test'"などで始めることができます。アニメーションのdefの*がそれを受け取るはずです! – danimal

答えて

4

私は同様の問題を抱えており、少し異なるアプローチをとる必要があることを発見しました。

角では、アニメーションは状態にリンクされています。そのため、HTMLでアニメーションに異なるトリガーを定義する代わりに、トリガーがコンポーネントクラスで監視できる複数の状態を定義する必要があります。また、メソッドから直接アニメーションをトリガーするのではなく、アニメーションがリンクされているオブジェクトの状態を設定します。

たとえば、必要なモジュールをインポートした後、コンポーネントデコレータで次のように定義することがあります。

@Component({ 
    selector: 'app-some-animated', 
    templateUrl: './some.component.html', 
    styleUrls: ['./some-animated.component.scss'], 
    animations: [ 
    trigger('flyInOut', [ 
     transition("void => fly", [ 
     animate(300, keyframes([ 
      style({transform: 'translateX(100%)', opacity: 0}), 
      style({transform: 'translateX(0)', opacity: 1}) 
     ])) 
     ] 
    ) 
    ]), 
    trigger('flyInOut', [ 
     transition("void => fade", [ 
      animate(300, keyframes([ 
      style({opacity: 0}), 
      style({opacity: 1}) 
      ])) 
     ] 
    ) 
    ]) 
    ] 
}) 

このインスタンスでは、要素がインスタンス化されるとすぐにアニメーションが作成されます。また、ngOnInit()メソッドでthis.watchMeを "fly"または "fade"に設定しています。あなたはおそらく、あなたのフィールドオブジェクトにしたり、* ngForから反復可能な条件として必要な状態を追加したい、あなたの場合は

<div [@flyInOut]="watchMe"> 
    Some content... 
</div> 

:私はそうのようなflyInOutトリガーを取り付けていますHTMLで

This article coursetroからは素晴らしい説明とビデオもあります。

+1

これを私が見つけた唯一の方法なので、私はこれを答えとして受け入れています。アニメーションの状態を管理する必要はありません。特にこの場合は、配列内の各アイテムに対して行う必要があります。私は角度がこれら2つの形のアニメーション(インスタンスと状態)を持っているのが奇妙だと分かります。私はまた、私が動的に加えることができない唯一の属性が角型チームによってどのように作られているのか好きではありません:P Ohh well – Devcon

+2

それはちょっとしたジャンク解です。しかし、これはAngularのことで、他の人のコードを実際に構成するだけではないような気がします。 – user2528534

+0

watchmeの状態を変更するコンポーネントの関数の例を追加できますか? – tatsu

関連する問題