如何使用observable从db获取数据

时间:2016-07-28 05:26:37

标签: typescript angular

我正在尝试从我的数据库中获取记录,我编写了observables并使用以下代码我没有得到任何记录。可以请某人建议帮助。

我的组件,

  import { Injectable } from '@angular/core';
  import {Component} from '@angular/core';
  import {Http, Response, Headers} from '@angular/http';
  import {Observable} from 'rxjs/Observable';
  import { IDetails } from './details';
 @Component({

    templateUrl: './components/search/search.html',

 })
 @Injectable()
 export class Search {

    details:IDetails[];

      constructor(public http: Http) {
         this.http = http;
       }

     submit(id):any{


      var headers = new Headers();
        var id  = localStorage.getItem('social_id')
       headers.append('Content-Type','application/x-www-form-urlencoded')
      this.http.get('http://localhost/a2server/index.php/profile/search/'+id,{headers:headers})
        .subscribe(
         response => { <IDetails[]> response.json(); })
}
     }

我正在尝试从我的数据库中获取记录,我编写了observables并使用以下代码我没有得到任何记录。可以请某人建议帮助。

1 个答案:

答案 0 :(得分:0)

<强>更新

在你对我的回答的评论中,我相信你问为什么使用Observable是什么原因。在您的特定代码中,除了Http对象旨在返回Observables这一事实之外,没有其他理由可以使用。我应该指出,在谈到良好实践时,你的Http呼叫并不是最好的方式。

您的Http调用应该在Service中,而不是直接在Component中。组件应该在您的服务中订阅Observable。这是一个Plunker,演示了如何利用Observable和服务。

export class ComponentOne{
  private _videoID:number;
  private _searchedItem:IVideo;
  constructor(private _videoService:VideoService){
    this._videoID = 0;
    this._searchedItem = {};
  }

  componentClick():void{
    this._videoService.getVideo(this._videoID).subscribe((data: IVideo) => {
    console.log(data);
    });
  }
}

这是一个非常好的tutorial,我曾经熟悉如何利用Observables。

看起来你只是忘了设置你的详细信息&#34;变量返回结果。我想你只需要调整你的订阅功能看起来像这样(假设你的php调用工作正常)。

response => { this.details = <IDetails[]> response.json(); })