Angular组件未从服务加载数据[重复]

Posted

技术标签:

【中文标题】Angular组件未从服务加载数据[重复]【英文标题】:Angular component not loading data from service [duplicate] 【发布时间】:2018-08-01 01:10:44 【问题描述】:

我正在尝试从服务加载一些数据,该服务在我在控制台中测试它时工作,它正确显示所需的数组,但是当从我的组件调用服务的相同方法时(我需要渲染数据)它只是在控制台中显示 [object Object].... 而在组件本身上没有任何内容。

仅供参考:正在使用的提供程序('/api/departement')正常工作,因为数据可以显示在控制台中(来自服务本身的数据)。

这是我的代码:

Department.ts:

export class Departement
public code_dep:String;
public lib_dep_AR:String;
public lib_dep_FR:String;
public countm:number;

Departement.service.ts

import  Departement  from './departement';
import  Http,Headers  from '@angular/http';
import 'rxjs/add/operator/toPromise';
import  Injectable  from '@angular/core';
@Injectable()
export class DepartementService

constructor(private http:Http)
private headers = new Headers('Content-type':'application/json');
private depUrl = '/api/departement';

getAllDeps():Promise<Departement[]>

    return this.http.get(this.depUrl + "/allDeparts").toPromise().
    then(response=>response.json() as Departement[]);  

  
// etc

displaying.component.ts

  export class Displaying implements OnInit 
  departements:Departement[];
  departement:Departement;
  constructor(public depserv:DepartementService,public router:Router) 

   

  ngOnInit() 
    this.depserv.getAllDeps().then(dep =>    
          this.departements = dep;
       );

    //etc  
  

我想在哪里渲染结果

<select name="budget" >     
 <option>my results down here</option>            
 <option *ngFor="let x of departements">x.lib_dep_FR</option>
</select>

通过转到 Observable 界面修复

Department.service.ts

private extractData(res:Response) 
    let body = res.json();
    return body || [];

getData():Observable<Departement[]>
    return this.http.get(this.depUrl+"/allDeparts").map(this.extractData).catch(this.handleError);

在 display.component.ts 中赶上结果

ngOnInit()
    this.depserv.getData().subscribe(
   dept => this.departements = dept);

【问题讨论】:

console.log(this.deparments) 在组件内显示什么 它显示“未定义”:(@Sajeetharan 当我尝试 this.depserv.getAllDeps().then(Departement => this.departements = Departement; console.log("data : "+Departement); );它显示数据:[object Object],[object Object],[object Object],[object Object],[object Object],[object Object] 添加 JSON.stringify(console.log(this.deparments));并发布结果 结果相同,未定义 【参考方案1】:

displaying.component.ts 文件中而不是这个this.departements = dep; 更改为这个this.departements = dep.json(); 并检查你在console.log(this.departements) 中得到了什么如果你得到对象数组或值数组,那么数据将来自x.lib_dep_FR

【讨论】:

.getAllDeps() 方法已经返回一个数组 "Promise : Department[]" ,所以在组件中获取时我不能使用 dep.json() 在 display.component.ts 文件中,您是否在 dep 中获取数据?? 是的,我得到了:数据:[object Object],[object Object],[object Object],[object Object],[object Object],[object Object] @YassineBenHamida 上面你告诉过你没有定义 因为你没有 JSON。你有一个数组:[]。 JSON 是 javascript 对象的字符串表示形式。您可以使用 JSON.stringify 方法从现有对象生成 JSON 字符串:.更改为 this.departements =JSON.stringify(dep);现在检查你在 console.log(this.departements) 中得到了什么

以上是关于Angular组件未从服务加载数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

数据未从Angular中的父组件传递到子组件

Angular 5 中服务的生命周期是啥

在Angular中动态加载组件[重复]

Angular (v2) 扩展系列组件通信(无父或外部服务)

Angular 2 根据用户输入重新加载当前组件

Angular2:如何在渲染组件之前加载数据?