我有以下控制器。
spaModule.controller("galleryController", function($http, $scope) {
var test;
$http.get("resources/php/gallery.php").success(function(response){
test = response;
});
console.log(test);
});
此控制器向PHP文件发送一个get请求,该文件返回一些JSON,其中包含我在某个目录中拥有的所有图像的文件名。我知道我应该为此使用服务,但我只会在一个控制器中使用这些信息,所以我宁愿将它保存在这个控制器中。
我需要将匿名函数内部的响应数据放入控制器的范围内,以便我可以使用JSON数据创建一个gallery指令。
我在这个问题中添加的代码是我尝试这样做的。我认为我的问题可能是.success函数有自己的范围,或者可能是$ http对象,所以我在一个“嵌套”范围内。那就是我需要将JSON从匿名函数的范围中移入.success / $ http的范围,然后从该范围进入控制器的范围。我不确定这是我的问题,还是它是如何实现这一目标的。
如何将我的响应JSON提供给控制器的范围?
答案 0 :(得分:2)
只需将其分配给$scope
即可。本地var
变量从来就不是Angular"范围",在回调内部或外部。
$http.get("resources/php/gallery.php").success(function(response){
$scope.test = response;
});
如果您的意思是要对数据进行后处理,则需要在success
回调中执行此操作。由于操作是异步操作,示例中的console.log
部分永远无法访问此数据。
$http.get("resources/php/gallery.php").success(function(response){
// do whatever you need to do here
var data = response.map(..);
// then assign to $scope:
$scope.data = data;
});
答案 1 :(得分:0)
如果合适,您可以将隐藏的数据存储在您的范围内:
spaModule.controller("galleryController", function($http, $scope) {
$http.get("resources/php/gallery.php").success(function(response){
$scope.data = response;
});
});
但是,如果数据规模不大,也许应该这样做。否则你应该将它存储在其他地方并处理它,并且只在$ scope
上设置ui所需的值答案 2 :(得分:0)
listenerAddPersonToBasket: function(data){
BasketService.addPerson(data.personId,function(){
this.updateBasketTotal();
}.bind());
},
在此处设置成功函数内的$ scope.test。 Angular会注意到范围已更新并为您完成工作。因此,您可以在代码中的其他位置使用$ scope.test。熟悉异步功能。
我希望这回答你的问题。
答案 3 :(得分:-1)
您忘记在控制器中注入依赖项
请更改控制器代码段,如下所示
spaModule.controller("galleryController", ['$scope','$http',function($scope,$http) {
var test;
$http.get("resources/php/gallery.php").success(function(response){
test = response;
});
console.log(test);
}]);