如何使用 Angular Observer 从数据库中获取特定数据

How to fetch a particular data from database using Angular Observer

在输入框中,当我输入 'Title' 时,我应该得到标题列表,但是当我 运行 时,我得到 [object Object][object Object][object Object] 的列表...

这是API https://jsonplaceholder.typicode.com/posts

我需要获取特定信息

HTML

<div class="container">
  <div class="row">
    <div class="col-xs-12 col-sm-10 col-md-8 col-sm-offset-1 col-md-offset-2">

      <input type="text" #name>
      <button class="btn btn-primary" (click)="onGet(name.value)">Add Server</button>
       <p>{‌{ servers }}</p>

    </div>
  </div>
</div>

COMPONENT.TS

    import { Component } from '@angular/core';

import {ServerService} from "./server.service";

@Component({
  selector: 'app-list',
  templateUrl: './list.component.html',
  styleUrls: ['./list.component.css'],
  providers: [ServerService]
})
export class ListComponent  {
  servers = [];
  constructor(private serverService: ServerService) {}

  onGet(name: string) {
    this.serverService.getServers( name )
      .subscribe(
        (servers: any[]) => this.servers = servers,
        (error) => console.log(error)
      );
  }
}

SERVICE.TS



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

@Injectable()
export class ServerService {
  constructor(private _http: Http) {}


  getServers(name: string) {
    console.log(name);
    return this._http.get('https://jsonplaceholder.typicode.com/posts' )
      .map(
        (response: Response) => {
          const data = response.json();
          console.log(data)
          return data.name;
        }
      )
  }
}

请帮我解决这个问题。

您尝试在模板中插入的值是一个数组 (servers)。当您尝试在 Angular 模板中插入引用类型对象时,您将获得它们的字符串表示形式(插入使用 toString()),因此,[object Object][object Array]。如果您想在模板中以纯文本形式查看对象,请考虑使用 json 管道,如下所示:<p>{‌{ servers | json }}</p>,但很可能您会想要使用 ngFor 并展开对象在数组内部,像这样,可能是:<p *ngFor="let server of servers">{{ server.title}}</p>,例如。详细了解 json 管道和 ngFor here and here

更新您的服务如下:

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

@Injectable()
export class ServerService {
  constructor(private _http: Http) {}


  getServers(name: string) {
    console.log(name);
    return this._http.get('https://jsonplaceholder.typicode.com/posts' )
      .map(
        (response: Response) => {
          const data = response.json();
          console.log(data)
          return data;
        }
      )
  }
}

此处返回数据而不是 data.name。由于数据是 object 的数组,因此数据中没有 属性 "name"。 "name" 是其项目的 属性。

模板应该是:

<div class="container">
  <div class="row">
    <div class="col-xs-12 col-sm-10 col-md-8 col-sm-offset-1 col-md-offset-2">
      <input type="text" #name>
      <button class="btn btn-primary" (click)="onGet(name.value)">Add Server</button>
       <div *ngFor="let server of servers">
         <p *ngIf="name.value == 'title'">{{server.title}}</p>
         <p *ngIf="name.value == 'id'">{{server.id}}</p>
         <p *ngIf="name.value == 'userId'">{{server.userId}}</p>
         <p *ngIf="name.value == 'body'">{{server.body}}</p>
       </div>
     </div>
   </div>
</div>

然后会显示标题列表。