javascript - 如何将 $scope 传递给服务

标签 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 ,我在 Controller 中而不是在我的服务中运行 .success

最佳答案

服务和工厂独立于作用域。他们无权通过依赖注入(inject)访问 $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 并在 Controller 中添加 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();
        }

    }
}]);

关于javascript - 如何将 $scope 传递给服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27307985/

相关文章:

Javascript url 验证允许相对和绝对 url

具有硬绑定(bind)的新 Javascript

javascript - 单页应用程序查看位置

json - AngularJS JSON 格式以逗号分隔

javascript - 如何访问我的 Controller 中的 AngularJS ui-bootstrap datepicker 值

javascript - CSS 多个不同高度的左浮动元素排列在 2 列中

javascript - 如何根据我的 JSON 数据动态创建 HTML DOM?

javascript - 为什么这段代码片段中 "Brain"打印了 4 次而不是 5 次?

css - Angular/Valdr - 将自定义类添加到 valdr-form-group

javascript - 将 vue-gtm(谷歌标签管理器)附加到 Router 实例