2017-08-27 1 views
0

ich eine Richtlinie haben, die in einer Ionen Liste wie folgt geführt wird:Richtlinie Execute/Funktion nur einmal ionic2

<ion-item-sliding [animateItemSliding]="shouldAnimate" </ion-item> 

Basicly es ist eine eigene Richtlinie, die nur eine CSS-Regel Animation von Transformations gilt, die wie wirkt gleiten und zurück zum Normalzustand. Ich exicuting den shouldAnimate boolean über die Einstellung wie

export class PageName { 

shouldAnimate: boolean; ... } 

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

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

Diese für einen Moment wirkt, indem es die Lifecycle-Ereignisse mit. Wenn die Seite jedoch erneut generiert wird, setzt sie das sumotAnimate immer auf true.

Ich möchte in der Lage zu finden, Weg der Richtlinie und nur nur zum ersten Mal Sie diese Seite zu öffnen. Also sollte der boolesche Wert dieser Variable nur beim ersten Öffnen dieser Seite wahr sein, und dann diese Wahl behalten (boolean auf false setzen) und nie wieder ausführen (oder wahrscheinlich, bis Sie die App schließen und wieder vollständig vom Telefon laden)

Antwort

0

Es kann nicht so gemacht werden, wie Sie es wollen. Sobald die Komponente zerstört und neu erstellt wurde, gibt es keine Möglichkeit zu wissen, dass sie zuvor erstellt wurde. Sie müssen den Status über die verschiedenen Instanzen der Komponenten hinweg beibehalten. Die Methode von Angular ist ein Service.

Erstellen Sie einen Dienst, in dem Sie diese Daten speichern.

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

Stellen Sie es irgendwo, zum Beispiel in Ihrem AppModule. Fügen Sie dies in den Metadaten hinzu (das Objekt, das Sie an @NgModel übergeben).

providers: [MyService], 

Jetzt injizieren Sie ein Singleton dieses Dienstes in der Komponente.

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

Nun einfach die Variable umdrehen, wenn sie nicht schon gewendet ist. Dies geschieht am besten in der OnInit Lebenszyklus-Hook.

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

Ihre PageName Komponente könnte jetzt counrless mal zerstört, aber der Service wird weiterleben, was bedeutet, dass die Daten, die Sie die über Komponente bestehen wollen Schöpfung und Zerstörung.

+0

Ich werde versuchen, danke, aber ich brauche die shouldAnimate, um es auf false, sobald es das erste Mal wahr ist, sonst wird es die Anweisung jedes Mal ausführen. Nur um 100% sicher zu sein, hast du meinen Punkt, die Direktive nur einmal zu machen und nie wieder auf dieser Seite zu laden. –

+0

Nun, setzen Sie es auf 'false' anstelle von' true' ... Auch können Sie eine Direktive nicht "machen". Sie können eine Variable einmal festlegen und sie nicht dazu verwenden, etwas innerhalb der Direktive auszulösen. Die Anweisung wird jedoch von Angular erstellt, wenn sie in der Vorlage enthalten ist. –

+0

Ja, tut mir leid für meinen falschen Ausdruck, aber ich meinte genau das. Weil diese Anweisung nur ausgelöst wird, wenn der Name der booleschen Variablen wahr ist. Es hängt also von diesem booleschen Wert ab. –