我有一个问题我无法解决(很抱歉问了很多问题,但有角度的杀了我)。
我的控制器:
friendsApp.controller('friendsController', ['$scope','friendsFactory','secondFactory', function($scope, friendsFactory, secondFactory){
$scope.girlFriendName = friendsFactory.girlFriend();
secondFactory.getCity(function(data) {
$scope.city = data;
console.log($scope.city[0].Name);
});
}]);
我的工厂:
friendsApp.factory('secondFactory', function ($http){
return {
getCity: function(callback) {
// HOW TO GET THE VALUE FROM THE CONTROLLER???
var value = 5;
$http.get('http://localhost:8888/sqlapi/public/singleapi/' + value).success(callback);
}
}
});
出于测试目的,我将值手动写入Factory。 但我不知道如何从控制器插入它。 有人能帮我吗?或者让我走向正确的方向?
答案 0 :(得分:2)
我认为你过度复杂了。只需将承诺退还给控制器:
在你的工厂:
getCity: function(value) {
return $http.get('http://localhost:8888/sqlapi/public/singleapi/' + value);
}
然后在你的控制器中:
secondFactory.getCity('5').then(function (data) {
$scope.city = data;
console.log($scope.city[0].Name);
});
答案 1 :(得分:1)
您传递变量的方式与当前传递回调函数的方式相同:
控制器:
secondFactory.getCity(var, function(data) {
$scope.city = data;
console.log($scope.city[0].Name);
});
在您的工厂中将被引用为:
厂:
return {
getCity: function(var, callback) {
alert(var);
$http.get('http://localhost:8888/sqlapi/public/singleapi/' + value).success(callback);
}
}
但是,您应该使用.success()而不是传递回调函数,让工厂返回整个$ http请求。
厂:
return {
getCity: function(var) {
alert(var);
return $http.get('http://localhost:8888/sqlapi/public/singleapi/' + value);
}
}
控制器:
secondFactory.getCity(var).success(function(data) {
console.log(data);
});