Restangular不会返回来自REST api的对象

时间:2014-11-23 14:43:26

标签: javascript json rest asp.net-web-api restangular

我想问一些帮助。 我可以使用domain/service/webapi/网址调用服务。当domain/service/webapi/menu/getmenucategory然后它返回下面的JSON字符串,该字符串代表应用程序的菜单结构:

我的问题是如果我使用restangular调用这个url然后我得到了空对象。然而,Fiddler说Restangular调用webapi服务并且它返回下面的json。我不明白为什么restangular不会回馈我期望的javascript对象。

我浏览了文档,但我还没找到任何东西。我认为我做了一件非常简单的事情。

以下是脚本:

控制器:

'use strict';

dilibApp.controller('NavigationMenuController', function ($scope, navigationMenuService) {

    $scope.menuCategories = navigationMenuService.GetMenuCategories();

});

服务:

'use strict';

dilibApp.factory('navigationMenuService', function(Restangular) {

    return {
        GetMenuCategories: function() {
            //var menuCategories = Restangular.all('menu', 'getmenucategory');
            var menuCategories = Restangular.all('menu/getmenucategory');
            console.log(JSON.stringify(menuCategories.getList()));
            return menuCategories.getList();
        }
    }
});

Chrome控制台中的结果:

 {"restangularCollection":true,"$object":[]}

JSON字符串:

[{"$id":"1",
"Id":1,
"Name":"File",
"SortNo":0,
"IsEnabled":1,
"MenuItems":[{"$id":"2",
        "Id":1,
        "Name":"File menu item 1",
        "IsEnabled":1},
        {"$id":"3",
        "Id":2,
        "Name":"File menu item 2",
        "IsEnabled":1}]},
{"$id":"4",
"Id":2,
"Name":"Administration",
"SortNo":1,
"IsEnabled":1,
"MenuItems":[{"$id":"5",
        "Id":4,
        "Name":"Administration menu item 1",
        "IsEnabled":1},
        {"$id":"6",
        "Id":5,
        "Name":"Administration menu item 2",
        "IsEnabled":1}]},
{"$id":"7",
"Id":3,
"Name":"Modules",
"SortNo":2,
"IsEnabled":1,
"MenuItems":[{"$id":"8",
        "Id":6,
        "Name":"Modules menu item 1",
        "IsEnabled":1},
        {"$id":"9",
        "Id":7,
        "Name":"Modules menu item 2",
        "IsEnabled":1}]}]

1 个答案:

答案 0 :(得分:0)

我相信这是因为RestAngular正在回复一个承诺。所以你必须做类似的事情:

$scope.menuCategories = [];
navigationMenuService.GetMenuCategories().then(function(result){
     $scope.menuCategories = result;
});

你的问题是,如果你直接分配,那么你只是获得了promise对象,因为它是异步的,所以该数组中的直接结果最初是空的。在promise完成之前,然后数组将得到结果。