2017-08-27 20 views
0

をionic2私はこのようなイオンリストで渡されるディレクティブを持っているディレクティブ/機能を実行します摺動して、通常の状態に戻る。 は私がは一度だけ

export class PageName { 

shouldAnimate: boolean; ... } 

ionViewDidLoad() { 
    this.shouldAnimate = true; 
}; 

ionViewWillLeave() { 
    this.shouldAnimate = false; 
}; 

これは、ライフサイクルイベントを使用することにより、瞬間のために働くようにshouldAnimateブールの設定を経由して、それをexicutingています。しかし、ページが再び生成された場合でも、shouldAnimateはtrueに設定されます。

このページを開くときには、指示句のみを表示する方法と、を初めて検索する場合は、を開いてください。 この変数のブール値は、このページを最初に開いたときに真になり、この選択肢を覚えておいて(ブール値をfalseに設定して)、再度実行しないでください(アプリケーションを終了し、 )

答えて

0

あなたが望むようにすることはできません。コンポーネントが破棄され、再度作成されると、コンポーネントが以前に作成されたことを知る方法はありません。あなたはどこかでコンポーネントの異なるインスタンス間で状態を持続させる必要があります。これを行う角度の方法はサービスです。

このデータを保存するサービスを作成します。

@Injectable() 
export class MyService { 
    shouldAnimate = false 
} 

AppModuleのように入力してください。これをメタデータ(@NgModelに渡すオブジェクト)に追加します。

providers: [MyService], 

このサービスのシングルトンをコンポーネントに挿入します。

export class PageName { 
    constructor(private myService: MyService) {} 
} 

変数を反転していない場合は、1回だけフリップします。これは、OnInitライフサイクルフックで行うのが最適です。

ngOnInit() { 
    if (!this.myService.shouldAnimate) { 
    this.myService.shouldAnimate = true 
    } 
} 

あなたPageNameコンポーネントが今counrless回を破壊したかもしれませんが、サービスが必要なデータは、コンポーネントの作成と破棄も持続することを意味している、生きます。

+0

私はこの感謝を試みますが、初めてfalseに設定するにはshouldAnimateが必要です。そうでなければ、毎回ディレクティブを実行します。ちょうど100%確実にあなたは私のポイントを得ました。実際にはこの指示を1回だけ行い、このページの負荷についてはもう一度やりません。 –

+0

さて、 'true'ではなく' false'に設定してください...また、指示文を一度 "実行"することはできません。変数を一度設定して、ディレクティブ内で何かをトリガーしないようにすることができます。しかし、このディレクティブはテンプレート内にあればAngularによって作成されます。 –

+0

はい、私の間違った表現のために申し訳ありませんが、私はそれを正確に意味しました。このディレクティブは、ブール変数名がtrueの場合にのみ起動されるためです。したがって、それはすべてそのブール値に依存します。 –