我对angular非常陌生,我试图了解如何使用范围变量从REST API进行查询,以确定在get请求中提取的URI。
让我说我在我的app.controller中,并且它有一个服务,它会发出一系列数字..为了使代码最小化,我将跳到重要的部分:
$scope.currentCompanyId = '0001';
$http.get('/api/'+ $scope.currentCompanyId +'/c').
success(function(data, status, headers, config) {
$scope.cData = data;
}).
error(function(data, status, headers, config) {
// log error
});
我知道这是作弊,因为$ http.get在控制器中。我知道它需要是某种类型的工厂..但我不知道如何将$ scope.currentCompanyID传递给get请求并让它返回JSON。此外,如果$ scope.currentCompanyID要更改为另一个数字,请说...' 0002' .. $ scope.cData如何更改以反映新查询?
答案 0 :(得分:3)
我不认为在你的控制器中使用$ http是作弊 - 将它放入工厂/服务的一个原因是它可以重复使用。如果您只是在一个地方进行,那么服务不会增加太多。
话虽这么说,您的服务可以返回一个带参数的函数:
app.factory("service", function($http) {
return {
getCompany: function(companyId) { ...make $http call and return data... }
}
});
然后在你的控制器中:
service.getCompany($scope.currentComanyId).then(function(resp) {...})
答案 1 :(得分:2)
您应该考虑使用Angular $resource
,因为它会处理很多抽象。无论哪种方式,如果您想根据范围变量的变化发出新请求,您可以$watch
:
$scope.$watch('currentCompanyId', function() {
if(!$scope.currentCompanyId) return;
$http.get().success(); // replace with whatever mechanism you use to request data
});
答案 2 :(得分:0)
如果当前公司ID发生变化,您的请求将无法启动...您需要手动启动您的请求。
否则,它似乎是正确的
答案 3 :(得分:0)
你看过$ resource服务吗? http://docs.angularjs.org/api/ngResource/service/ $资源 - 这是一种非常方便的REST请求方式,而且docs有很多适合你的例子
关于更改$ scope.currentCompanyID - 您似乎需要为此案例创建监视:
scope.$watch('currentCompanyID', function(newValue, oldValue) {
// do your update here, assigning $scope.cData with the value returned
// using your code:
$http.get('/api/'+ $scope.currentCompanyId +'/c').
success(function(data, status, headers, config) {
$scope.cData = data;
}).
error(function(data, status, headers, config) {
// log error
});
});
答案 4 :(得分:0)
您只需在调用服务时传入数据。在您的控制器中,您需要将您的服务作为DI模块包含在内并按如下方式处理:
window.angular.module('myControllerModule', [])
.controller('myController', ['$scope', 'myHTTPService',
function($scope, myHTTPService){
$scope.currentCompanyId = 1;
$scope.lookupPromise = myHTTPService.get($scope.currentCompanyId);
$scope.lookupPromise.then(function(data){
//things to do when the call is successful
},function(data){
//things to do when the call fails
});
}]);
在您的服务中,您可以像这样处理该值:
window.angualr.module('myHTTPServiceModule', [])
.factory('myHTTPService', '$http',
function($http){
function callHTTP(url){
return $http.get('/api/' + url + '/c');
}
return {
get: callHTTP
};
});