我需要在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没有问题。
答案 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;
});
};