2017-10-13 1 views
0

Ich versuche, eine automatische Vervollständigung zu erstellen, und ich verwende Observable und Subject. Die Service-Methode wird jedoch nicht aufgerufen, wenn sich der Wert des Subject-Objekts ändert. Unten ist mein Komponentencode, wo ich den Betreff definiert habe.Observable nicht auf Wertänderung in Subject.next() aufgerufen werden

detailsPersist.component.ts

import { Component, OnInit } from "@angular/core"; 
import { Subject } from 'rxjs/Subject'; 
import { DataService } from './data.service'; 

export class DetailsPersistComponent implements OnInit{ 
products; 
term = new Subject(); 
constructor(private _dataService: DataService){ 

    } 
ngOnInit(){ 
     this._dataService.getSwiftProducts(this.term) 
      .subscribe(products => this.products = products) 
    } 

    search($event) { 
     let q = $event.target.value 
     console.log(q) 
     this.term.next(q) 
    } 
} 

Unten ist der Code für meine Datendienst

data.service.ts

import { Injectable } from '@angular/core'; 
import { Http, Response, Headers, RequestOptions, URLSearchParams } from '@angular/http'; 
import 'rxjs/add/operator/map'; 
import {Observable} from 'rxjs'; 


@Injectable() 
export class DataService{ 
getSwiftProducts(term): Observable<any>{ 
    return this._http.get("/api/getSwiftProduct/:"+term) 
     .map(result => this.result = result.json().data) 
    } 
} 

Antwort

1

Sie wahrscheinlich so etwas wie dies tun wollen:

ngOnInit() { 
    this.subscription = this.term 
    .switchMap(term => this._dataService.getSwiftProducts(term)) 
    .subscribe(products => this.products = products) 
} 

ngOnDestroy() { 
    this.subscription.unsubscribe(); 
} 
+0

Dank martin. Genau, was ich brauchte ... redigierte gerade Ihre Antwort, da das Paket, das enthalten werden sollte, nicht erwähnt wurde – Apoorv

Verwandte Themen