带参数的$ resouce查询

时间:2016-05-02 18:24:17

标签: c# asp.net angularjs

我正在学习Angular并且正在构建一个使用$ resource来处理数据的服务。我能够使用query()来获取数据列表,但现在我想将其过滤为特定项目列表。我已经在我的asp.net MVC代码中创建了一个方法来调用它,它需要2个参数(sectionId和typeId)但是我没有看到被angular调用的方法。我的断点永远不会在我的asp.net代码中被击中。我的角度呼叫如下:

(function () {
'use strict';

testModule.factory('InventoryRepository', ['$resource', InventoryRepository]);

function InventoryRepository($resource) {
    return {
        get: function (sectionType, typeId) {
            return $resource('/mySite/GetInventoryGrid/:sectionType/:typeId', {sectionType: '@sectionType', typeId: '@typeId'}, {
                query: {method: 'GET', isArray:true}
            }).query();
        },
        save: function (inventoryItem) {
            return $resource('/mySite/SaveInventoryItem').save(inventoryItem);
        },
        remove: function (inventoryItem) {
            return $resource('/mySite/RemoveInventoryItem').save(inventoryItem);
        }
    }
}
})();

保存和删除方法工作正常,我不知道如何让查询使用参数。然后将此结果返回给我的呼叫控制器:

vm.Inventories = InventoryRepository.get(sectionType, typeId);

我看到调用确实有效,因为我在Chrome中的细分确实进入了InventoryRepository的get方法。使用Fiddler我看到使用500返回进行的调用,它似乎没有传递参数。

更新,我通过更改以下内容修复了它: 来自我的控制器:

vm.Inventories = InventoryRepository.get({ sectionType: sType, typeId: typeId});

我的服务获取方法:

            get: function (params) {
            return $resource('/mySite/GetInventoryGrid?sectionType=:sectionType&typeId=:typeId', { sectionType: '@sectionType', typeId: '@typeId' }, {
                query: {method: 'GET', isArray:true}
            }).query({ sectionType: params.sectionType, typeId: params.typeId});
        },

我没有意识到get方法调用在传入get时将2个参数合并为1个对象。

1 个答案:

答案 0 :(得分:1)

您没有将参数传递给query()方法。

get: function (sectionType, typeId) {
    return $resource('/mySite/GetInventoryGrid/:sectionType/:typeId', {sectionType: '@sectionType', typeId: '@typeId'}, {
        query: {method: 'GET', isArray:true}
    }).query({sectionType: sectionType, typeId: typeId});
             ///^^^^^^^^
},