我想问一些帮助。
我可以使用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}]}]
答案 0 :(得分:0)
我相信这是因为RestAngular正在回复一个承诺。所以你必须做类似的事情:
$scope.menuCategories = [];
navigationMenuService.GetMenuCategories().then(function(result){
$scope.menuCategories = result;
});
你的问题是,如果你直接分配,那么你只是获得了promise对象,因为它是异步的,所以该数组中的直接结果最初是空的。在promise完成之前,然后数组将得到结果。