2017-10-13 5 views
0

私はオートコンプリートを作成しようとしています。ObservableとSubjectを使用しています。しかし、Subjectメソッドの値が変わるたびにサービスメソッドが呼び出されることはありません。以下は、Subjectを定義したコンポーネントコードです。Subject.next()の値の変更に対してObservableが呼び出されない

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) 
    } 
} 

私のデータサービス用のコードをあなたはおそらくこのような何かをしたい

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) 
    } 
} 

答えて

1

です:

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

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

ありがとうmartin。まさに私が必要なものは...含まれるパッケージが言及されていなかったのであなたの答えを編集しました – Apoorv

関連する問題