我想获取数据以更新我的表达式{{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
,而不是在我的服务中。
答案 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();
}
}
}]);