Angular2:Http.get <object []> map undefined

时间:2018-01-29 10:52:58

标签: angular angular2-services http-get

我有一个使用这些导入定义的服务:

import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { Observable } from "rxjs/Observable";
import "rxjs/add/operator/map";
import { Subject } from "rxjs/Subject";
import { Navigation } from "../Shared/app.home";
import { Module } from "../Shared/app.home";

然后在服务中我定义了一个方法:

getNavigationModules(): Observable<Navigation[]> {
    return this.http.get<Module[]>("/api/modules/getuserpreferences").map((mods) => {
        return mods.map(m => {
            var nav = new Navigation();
            nav.id = m.Id;
            nav.name = m.Name;
            nav.isFavorite = m.IsFavorite;
            nav.url = m.FriendlyUrl;
            nav.status = (m.ModuleProperties["Status"] != null && m.ModuleProperties["Status"] === "Online") ? "on" : "off" ;
            nav.type = m.Type;

            return nav;
        });
    });
}

调用该方法时,我得到映射未定义的错误。 当调用mods.map我假设通过调用http.get来mods将是一个Module数组,但是当我使用调试器(Chrome)时,我看到调试器将mod视为具有属性Module的Object,这个是Module阵列。

enter image description here

但如果我将代码更改为mods.Modules.map,编译时会出错,因为mods实际上是Module []而不是对象。

我错过了什么?

由于

1 个答案:

答案 0 :(得分:2)

你告诉TypeScript后端将发回的是一个Module数组。但事实并非如此。它是一个对象,有一个名为Modules的字段,它是一个Module数组。所以告诉TypeScript正确的事情:

getNavigationModules(): Observable<Navigation[]> {
    return this.http.get<{Modules: Module[];}>("/api/modules/getuserpreferences").map((mods) => {
        return mods.Modules.map(m => {
            var nav = new Navigation();
            nav.id = m.Id;
            nav.name = m.Name;
            nav.isFavorite = m.IsFavorite;
            nav.url = m.FriendlyUrl;
            nav.status = (m.ModuleProperties["Status"] != null && m.ModuleProperties["Status"] === "Online") ? "on" : "off" ;
            nav.type = m.Type;

            return nav;
        });
    });
}