2017-04-26 3 views
0

Ich schreibe meine erste Angular 2/4 Anwendung mit Redux (ich bin neu in diesem Muster), und ich stecke in einem Problem fest. Ich verwende @ ngrx/storeAngular + redux + ngrx: Daten erhalten

Es gibt ein Modell namens Content. Mein Speicher (app.store.ts) ist:

export interface AppStore { 
    contents: {id: number, Content}; 
    contentContents: {id: number, Array}; 
} 

'Inhalt' hat eine Liste aller Inhalte (ID 1, 1 Inhalt; ID 2, Inhalt 2). 'contentContents' hat eine Liste von Inhalten und deren Kind. Ein Inhalt kann untergeordnete Inhalte enthalten. Deshalb mag ich wie ein Objekt halten:

{1: [2, 3, 6], 2: [7, 9, 10], 6: [11, 4, 5]}

Meine Reduktoren machen das schon, aber ich habe Probleme.

Ich habe die contentContents ausgewählt:

let subscription = this.store.select(store => { 
    return store.contentContents; 
}) 

und abonniert:

subscription.subscribe(contentContents => { 

}) 

ist es eine Möglichkeit, ein bestimmtes Element von contentContents zu abonnieren? Ich meine, ich möchte wissen, wann ein bestimmter Artikel von contentContents geändert wird. Beispiel: Die Komponente, die den Inhalt # 1 anzeigt, muss nur gewarnt werden, wenn contentContents [1] geändert wird, aber in der Art, wie ich sie erstellt habe, wird sie jedes Mal gewarnt, wenn contentContents geändert wird.

Andere Sache, wenn ich das erste Problem lösen kann: gibt es eine Möglichkeit, vom Speicher den Inhalt von einer bestimmten ID abzufragen?

Nehmen wir an, ich habe folgendes: 1: [2, 3, 6] Inhalt # 1 hat Inhalt # 2, # 3 und # 6 als Kind. Wie bekomme ich Inhalt # 2, Inhalt # 3 und Inhalt # 6

+0

Sie sollten nicht 'subscription s Cribe. Ein Abonnement soll die Rückgabe eines Abonnements sein. (was hilfreich ist, um sich abzumelden, wenn die Komponente zerstört wird) – Maxime

Antwort

0

versuchen Sie dies.

subscription.map(contentContents => 
contentContents.filter(contentContent.id === reqContent.id)); 

das Abonnement

subscription.subscribe(contentContent => { 
    console.log('contentContent', contentContent); 
}) 
0

Schon eine Weile her, dass Sie danach gefragt, aber vielleicht usefull noch:

NGRX hat memoized Selektoren, die automatisch erstellt werden, wenn Sie die Auswahlfunktion oder die verwenden können, explizit erstellt werden: https://github.com/ngrx/platform/blob/master/docs/store/selectors.md

Um also über eine Änderung eines bestimmten Artikels benachrichtigt zu werden, würde ich eine Funktion schreiben, also wählen Sie das aus Artikel.So etwas wie function getContentById(id:number,contentContents){ return contentContents.filter(contentContent.id === id)); }

Dann eine beobachtbare schaffen, welche diese Funktion nutzt:

content1$ = this.store.select(s => getContentById(s.contentContents,1))

und abonnieren Sie diese im User-Interface mit einem Asynchron-Rohr anstelle eines expliziten subscribe in Ihrer Komponente <div>{{content1$|async}}</div> In dieser So müssen Sie sich nicht manuell von der Subskription abmelden https://angular.io/api/common/AsyncPipe

Verwandte Themen