簡體   English   中英

Angular2:Http.get <Object[]> 地圖未定義

[英]Angular2: Http.get<Object[]> map undefined

我使用以下導入定義了服務:

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,該mod將是一個Module數組,但是當我使用調試器(Chrome)時,我看到調試器將mods視為具有Modules屬性的Object,這就是Module數組。

在此處輸入圖片說明

但是,如果我將代碼更改為mods.Modules.map,則編譯時會出現錯誤,因為mods實際上是Module []而不是對象。

我想念什么?

謝謝

您告訴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;
        });
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM