【问题标题】:Restangular does not give back the objects coming from REST apiRestangular 不返回来自 REST api 的对象
【发布时间】:2015-09-09 11:52:12
【问题描述】:

我想请求一些帮助。 我有一个可以使用domain/service/webapi/ url 调用的服务。当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}]}]

【问题讨论】:

  • 好的,我想做一些反对 - 在我看来 - Restangular 概念。我将我的 Restangular 调用移到了控制器中,现在它工作正常,但是,我不喜欢服务器调用和控制器在同一方法中运行。

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


【解决方案1】:

我相信这是因为 RestAngular 正在返回一个承诺。所以你必须这样做:

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

您的问题是,如果您直接分配,那么您只是获得了 Promise 对象,并且由于它是异步的,因此该数组中的直接结果一开始是空的。直到 promise 完成,然后数组中就会有结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    相关资源
    最近更新 更多