2016-07-27 15 views
3

Ich entwickle eine App mit Angular 2.0 und NGRX. Ich komme von React/Redux, also bin ich immer noch dabei, herauszufinden, wie man bestimmte Dinge macht.Wie Code nach dem Ändern des Status mit NGRX ausführen?

Wenn ich etwas in der Vorlage drucken möchten, kann ich so etwas schreiben:

@Component({ 
    selector: 'dashboard', 
    directives: [MainContainer], 
    styleUrls: [ 
    './dashboard.style.css' 
    ], 
    template: ` 
    <main-container [section]="viewSection | async"></main-container> 
    ` 
}) 
export class Dashboard { 

    private viewSection: Observable<MainViewSection>; 

    constructor(
    private store: Store<AppState> 
) { 
    this.viewSection = this.store.let(getMainViewSection()); 
    } 

} 

Aber jetzt möchte ich einige Code nach Wertänderungen auszuführen (es wird speichern Werte als Eingabe verwenden (das danach)

ich weiß, wird die Ansicht ändern, dass ich es mit componentWillReceiveProps in React tun können

Das einzige, was ich gefunden habe, die sein kann sehr nützlich so etwas wie dieses:.

Ich denke nicht, dass das eine elegante Art ist, aber ich kann nicht anders weg finden .. Leute haben mir gesagt, dass ich Dienste benutzen soll (ich weiß nicht, wie das zu diesem Fall passt) und ich habe gelesen über @Effects, aber ich weiß nicht, ob es das ist, wonach ich suche.

Danke!

Antwort

2

Ich denke, ist trotzig, was Sie suchen. Eine wird ausgeführt, wenn eine bestimmte Statusaktion aufgerufen wird. Nehmen Sie dieses Beispiel aus dem offiziellen NGRX example app

@Effect() clearSearch$ = this.updates$ 
    .whenAction(BookActions.SEARCH) 
    .map<string>(toPayload) 
    .filter(query => query === '') 
    .mapTo(this.bookActions.searchComplete([])); 

Mit der whenAction Methode, die Sie festlegen, welche Aktion die Wirkung auslöst. In diesem Beispiel verwenden sie toPayload, die nur die Nutzdaten der ausgeführten Aktion zurückgibt. Aber Sie haben Zugriff auf den gesamten Status der Anwendung.

Dies ist, wie man es zum Beispiel verwenden:

.whenAction(YourActions.SOMETHING) 
    .switchMap(data => this._xhr.send(data.state.yourData) 
+0

ich darüber nachgedacht, aber wie kann ich die Methode eines Objektes auslösen, die innerhalb einer Komponente ist? Ich habe eine Ebene der Karte, die ich einige Parameter ändern und eine Methode aufrufen muss. Soll ich die Ebene im Zustand speichern und durch Effekte verändern? –

+0

Ja, ich denke schon. Wenn Sie eine Methode in einer Komponente aufrufen möchten, wenn sich der Status ändert, sollte es sich nicht wirklich um eine Komponentenmethode handeln, sondern um eine Zustandsaktion. –

Verwandte Themen