如何将$ scope传递给服务

时间:2014-12-05 02:54:37

标签: javascript angularjs

我想获取数据以更新我的表达式{{myList}},但似乎我的服务中存在$ scope问题,下面的代码似乎不起作用:

app.controller('AppCtrl', ['$scope', 'getTopicContent', function($scope,getTopicContent){
    getTopicContent.request();

}]);

app.factory('getTopicContent', ['$http', function($http, $scope){

    var query = function() {
        return $http({
            url: "http://www.corsproxy.com/mydata.me/level1/list.php",
            method: "GET"
        }).success(function(data, $scope){
            $scope.myList= data;
        });
    }

    return {
        request : function(){
            return query();
        }

    }
}]);

但是,如果我这样做,它将会工作http://pastebin.com/T7rjKYds,我在控制器中运行。success,而不是在我的服务中。

1 个答案:

答案 0 :(得分:2)

服务和工厂独立于范围。他们无法通过依赖注入访问$scope以确保正确分离关注点。

您有两种选择,将$scope传递给您的getTopicContent.request($scope)方法,如下所示:

app.controller('AppCtrl', ['$scope', 'getTopicContent', function($scope,getTopicContent){
    getTopicContent.request($scope);
}]);

app.factory('getTopicContent', ['$http', function($http){

    var query = function($scope) {
        return $http({
            url: "http://www.corsproxy.com/mydata.me/level1/list.php",
            method: "GET"
        }).success(function(data){
            $scope.myList = data;
        });
    }

    return {
        request : function($scope){
            return query($scope);
        }

    }
}]);

或者返回promise并在控制器中添加success()处理程序:

app.controller('AppCtrl', ['$scope', 'getTopicContent', function($scope,getTopicContent){
    getTopicContent.request().success(function(data){
        $scope.myList = data;
    });
}]);


app.factory('getTopicContent', ['$http', function($http){

    var query = function() {
        return $http({
            url: "http://www.corsproxy.com/mydata.me/level1/list.php",
            method: "GET"
        })
    }

    return {
        request : function(){
            return query();
        }

    }
}]);