我從http://ecommerce-ux.london/wp-json/wp-api-menus/v2/menus/2拉動api,它似乎有一切設置正確,現在想顯示從api object.items(這是菜單兒童) 當我做{{menus}}時,我得到[object object]。Angular 2,如何控制對象對象或通過對象對象循環
顯然你不能使用* ngFor如果它是一個對象,所以我需要創建一個管道,但仍然可以找出如何顯示所有我得到的鍵或值的元素。
有人能告訴我我哪裏出錯了。
主menu.component.html
<ul>
<li *ngFor="let menu of menus | menu">
{{ menu.key }} {{ menu.value }}
<ul>
<li *ngFor="let items of menu | menu">
{{ items.key }}
</li>
</ul>
</li>
</ul>
menu.service.ts
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import { Menu } from './menu';
@Injectable()
export class MenuService {
private _wpMenuBase = "http://ecommerce-ux.london/wp-json/wp-api-menus/v2/";
constructor(private http: Http) { }
getPosts(): Observable<Menu[]> {
return this.http
.get(this._wpMenuBase + 'menus/2')
.map((res: Response) => res.json());
}
}
主menu.components.ts
import { Component, OnInit } from '@angular/core';
import { Menu } from '../menu';
import { MenuService } from '../menu.service';
import { Router, ActivatedRoute, Params } from '@angular/router';
@Component({
selector: 'app-main-menu',
templateUrl: './main-menu.component.html',
styleUrls: ['./main-menu.component.css'],
providers: [MenuService]
})
export class MainMenuComponent implements OnInit {
menus: Menu[];
constructor(private menuService: MenuService, private router: Router) { }
getPosts(){
this.menuService
.getPosts()
.subscribe(res => {
this.menus = res;
});
}
ngOnInit() {
this.getPosts();
}
}
menu.ts
export class Menu {
}
JSON
{
"ID":2,
"name":"Main menu","slug":"main-menu",
"description":"","count":2,
"items":[
{
"id":4,"order":1,"parent":0,
"title":"Sample Page","url":"http:\/\/ecommerce-ux.london\/sample-page\/","attr":"","target":"","classes":"","xfn":"","description":"","object_id":2,"object":"page",
"object_slug":"sample-page",
"type":"post_type",
"type_label":"Page"},
{
"id":7,
"order":2,
"parent":0,"title":"other page","url":"http:\/\/ecommerce-ux.london\/other-page\/","attr":"",
"target":"","classes":"","xfn":"",
"description":"",
"object_id":5,"object":"page","object_slug":"other-page","type":"post_type","type_label":"Page"}
],
"meta":
{
"links":
{
"collection":"http:\/\/ecommerce-ux.london\/wp-json\/wp\/v2\/menus\/",
"self":"http:\/\/ecommerce-ux.london\/wp-json\/wp\/v2\/menus\/2"
}
}
}
menu.pipe.ts
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'menu'
})
export class MenuPipe implements PipeTransform {
transform(value, args:string[]) : any {
let keys = [];
for (let key in value) {
keys.push({key: key, value: value[key]});
}
return keys;
}
}
這兩個版本給我一個錯誤: 第一個給我;無法找到類型爲「主菜單」的不同支持對象'[對象對象]'。 NgFor僅支持與陣列等Iterables綁定。 和第二個 ./MainMenuComponent類中的錯誤MainMenuComponent - 內聯模板:11:7引起的:undefined不是對象(評估'self.context.menu.items') 爲什麼你使用我提供的api ? –
是的,第一個版本會給你一個錯誤。我沒有注意到你實際上提供了帶有響應的URL,所以我刪除了這一個選項。它應該與我提供的內容一致,因爲你可以看到,在你從api中得到的響應與在plunker中的響應完全一樣。由於在plunker中你不允許進行除https請求之外的任何操作,所以我讓你成爲一個模擬後端,用EXACT響應模擬,你可以看到它工作正常:http://plnkr.co/edit/7q0hjQPRzv94PWyaV7Lb?p=預覽在你的代碼中必須有一些其他的錯誤,否則比你提供的:) – Alex
正如你可以在這裏看到https://demo5426168.mockable.io/so_test我創建了完全相同的響應。這個循環錯誤表明其他事情正在發生。自我上下文錯誤指出,您正嘗試從自身引用某個變量本身。當您使用管道時,循環錯誤不存在,因爲它不會再指向自己。所以你的代碼中的其他地方你有一些錯誤:) – Alex