Ich habe ein Array von Threads-Objekten mit ID, Titel und einem isBookmarked: boolean.angular2 observables filter jedes Array-Element als Rückgabe an ein Array
Ich habe einen Betreff erstellt und möchte ihn abonnieren, um ein Array von Thread-Objekten mit isBookmarked = true zu erhalten.
https://plnkr.co/edit/IFGiM8KoSYW6G0kjGDdY?p=preview
Im Inneren der Dienst habe ich
export class Service {
threadlist:Thread[] = [
new Thread(1,'Thread 1',false),
new Thread(2,'Thread 2',true),
new Thread(3,'Thread 3',false),
new Thread(4,'Thread 4',true),
new Thread(5,'Thread 5',true),
new Thread(6,'Thread 6',false),
new Thread(7,'Thread 7',false),
]
threadlist$:Subject<Thread[]> = new Subject<Thread[]>()
update() {
this.threadlist$.next(this.threadlist)
}
}
in der Komponente
export class AppComponent implements OnInit {
localThreadlist:Thread[];
localThreadlistFiltered:Thread[];
constructor(private _service:Service){}
ngOnInit():any{
//This updates the view with the full list
this._service.threadlist$.subscribe(threadlist => {
this.localThreadlist = threadlist;
})
//here only if isBookmarked = true
this._service.threadlist$
.from(threadlist)//????
.filter(thread => thread.isBookmarked == true)
.toArray()
.subscribe(threadlist => {
this.localThreadlistFiltered = threadlist;
})
}
update() {
this._service.update();
}
}
die Instanz-Methode kann ich in der Regel verwenden, um ein Array zu spalten? Gibt es auch einen besseren Weg, es zu tun?
Dank
Für die Filterung hätten Sie 'this.localThreadlistFiltered = localThreadlist.filter (i => i.isBookmarked)' gemacht. Warum verwenden Sie auch ein 'Subject'? Alles, was Sie haben, ist ein Array, das Sie herumreichen. Kann es einen Strom von Fäden geben? – Abdulrahman
ja die Threadliste soll in mehreren Komponenten in einem Forum herumgereicht werden, das ich mit angular2 baue. Dieser Code dient nur der Erläuterung. Ich möchte die Filterung im Stream erfolgen, und ich weiß, dass es einen Operator geben muss, um die Arrays zu teilen –
Ja, es gibt eine [splice] (https://developer.mozilla.org/en/docs/Web/ JavaScript/Referenz/Global_Objects/Array/splice) und [slice] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/slice). 'splice', modifiziert das Array. Während 'slice' eine Kopie des modifizierten Arrays zurückgibt. Suchst du danach ? – Abdulrahman