我有一项服务,该服务应为我保存从JSON文件加载的特定数据。我希望数据在收到后立即显示在页面上。 我创建了一个$ scope变量,使其等于服务中的数据,该数据没有立即显示在页面上。
我仅在使用angular.copy(response.data, this.animals)
时达到了目标,
但是我不明白为什么我在使用this.animals = response.data
时为何不起作用。我想知道为什么会这样,有什么区别。
module.service("animalService", function($http) {
this.animals=[];
$http.get('animals.json').then(function(response) {
//this.animals = response.data ----> not working
angular.copy(response.data, this.animals)
});
});
module.controller("animalController", function($scope, animalService) {
//$scope.animals is what I use to create a table in html
$scope.animals = animalService.aniamsl;
});
答案 0 :(得分:1)
您的操作不正确,请尝试:
module.service("animalService", function($http) {
return $http.get('animals.json')
});
module.controller("animalController", function($scope, animalService) {
animalService.then(function(res){
$scope.animals = res.data
});
});
任何http
响应都返回promise
,这意味着数据将asynchronously
出现。根据我的理解,使用angular.copy
会触发一个digest
周期,因此可以检测到更改,但这并不是一个好习惯。如我在上面的代码中所示,更喜欢promise
处理
由于变量填充为promise
,并且将由其他controller
使用,因此我建议使用$rootScope.emit
和$rootScope.on
之类的事件,以便controllers
完成后会通知$http