将Params插入Angular Factory

时间:2015-07-22 19:33:50

标签: angularjs

我有一个问题我无法解决(很抱歉问了很多问题,但有角度的杀了我)。

我的控制器:

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。 但我不知道如何从控制器插入它。 有人能帮我吗?或者让我走向正确的方向?

2 个答案:

答案 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);
});