angular - Skicka en variabel till en observable


Jag använder för närvarande ett observerbart på följande sätt:

this._socket.onMessage.subscribe(
    (message) => {

    }
);

vilket fungerar bra! Skulle det dock vara möjligt att skicka en variabel till observabeln som skulle tillåta viss logik?

Till exempel genom att skicka en variabel "name" till onMessage, skulle jag kunna prenumerera endast på händelser vars namn är något specifikt? På detta sätt:

this._socket.onMessage(name-variable).subscribe(
    (message) => {
        // only get events that is related to the name-variable
    }
);

Svar #1

Du måste skapa hjälpfunktioner som ger önskad effekt.

public getMessagesForName(name: string): Observable<any> {
    return this._socket.onMessage.filter((message) => {
        return message.name === name;
    });
}

Den mer avancerade metoden skulle vara att skapa din egen klass som utökar en av Subject-klasserna. Som EventEmitter eller Subject och lägga till hjälpfunktionerna där. Du skulle då bara tillämpa filtret på this-referensen.

Här är ett exempel:

 class MessageEvent extends EventEmitter<MessageData> {
       public forName(name: string): Observable<MessageData> {
          return this.filter((message) => {
               return message.name === name;
          });
       }
 }

Allt beror på hur mycket återanvändning du behöver.

Svar #2

Redigera: Se svaret av ThnkingMedia

Jag är inte så säker på om du kan göra det med den syntax du letar efter, men du skulle troligen kunna göra något i stil med

let flag: boolean = someProperty;
this._socket.onMessage.subscribe(
    (message) => {
        if (flag) { // do something
        }
    }
);

Också, jag är ganska säker på att du kan använda ett filter()-anrop på din Observable. Så Observable skulle förmodligen kunna ändras

myObservable.filter(...).map(...).subscribe(....)
//where myObservable is the Observable object you're working with    

Relaterade artiklar