如何在angularJS中使用带参数的查询?

时间:2015-08-12 10:59:48

标签: javascript angularjs

我需要在Angular JS服务中使用一个查询方法,使用url /users/userId/sensors/连接到一个宁静的Web服务。当我在浏览器中输入url时,restful web服务工作正常,但是当我想在调用find方法时得到Angular服务的结果时,我什么都没得到。

controller.js

appControllers.controller('sensorController',
    function ($scope, Scopes, SensorService) {
        var userId = Scopes.get('id');
        $scope.sensors = [];
        $scope.sensors = function () {
        SensorService.find(userId, function (data) {
            $scope.sensors = data;
        });
    };
});

service.js

appServices.factory('SensorService', function ($resource) {
    var url = '/iots-web/rest/users/:userId/sensors/:path';
    return $resource(url, {path: '@path', userId: '@userId'}, {
        query: {method: 'GET',isArray: true},
        find: {method: 'GET', params: {userId: '@userId'}, isArray: true},
        create: {method: 'POST'},
        update: {method: 'PUT', params: {id: '@id'}},
        delete: {method: 'DELETE', params: {id: '@id'}}
    });
});

Scopes是我用来在控​​制器之间共享usrId的另一项服务,它工作正常,因此获取userId没有问题。

3 个答案:

答案 0 :(得分:0)

问题在于您尝试访问匿名函数中的javascript变量

    $scope.sensors = function () {

    SensorService.find(userId, function (data) {
        $scope.sensors = data;
    });

此匿名函数中不存在userId。

答案 1 :(得分:0)

$scope.sensors = [];

$scope.sensors = function () {
    SensorService.find(userId, function (data) {
        $scope.sensors = data;
    });
};

这对我来说似乎很可疑。首先将空数组指定给$scope.sensors,然后使用函数覆盖此值,然后在data到达时再次覆盖它。

首先尝试修复此问题,然后检查问题是否仍然存在。

答案 2 :(得分:0)

userId传递给资源调用的正确方法是:

SensorService.find({userId: userId}, function(data) {
    $scope.sensors = data;
});

另外,为了避免混淆,最好将传感器功能重命名为其他功能:

$scope.sensors = [];
$scope.getSensors = function() {
    SensorService.find({userId: userId}, function(data) {
        $scope.sensors = data;
    });
};