ng-repeat在restangular post请求后更新

时间:2016-09-02 12:34:43

标签: javascript angularjs restangular

我正在使用angularjs 1.5.8我的控制器代码如下

angular.module('testmodule')
 .controller('prd',function($scope,Restangular){
    this.items = [];

this.postbody = { "Filter": 700 } ;

Restangular.all('allPrd').post(this.postbody).then(function(data){
   this.items = Restangular.copy(data.tiles);
   console.log(this.items);
})

});

我的模板如下

<div ng-controller="prd as prd2">
   <div ng-repeat='item in prd2.items>
     {{prd2.items}}  
</div>
</div>

在发布请求后ng-repeat没有更新,但this.items的控制台日志是发布请求值。我如何提前感谢。

注意:我尝试了答案here,但它仍无效

2 个答案:

答案 0 :(得分:1)

then内部回调this只是全局对象。

因此,this没有items

相反,它会将items分配给全局对象,而不会反映在您的控制器中

使用var self = this

.controller('prd',function($scope,Restangular){
var self = this;    
self.items = [];

this.postbody = { "Filter": 700 } ;

Restangular.all('allPrd').post(this.postbody).then(function(data){
   self.items = Restangular.copy(data.tiles);
   console.log(this.items);
})

});

答案 1 :(得分:0)

您必须使用有角度的2 way bind

angular.module('testmodule')
 .controller('prd',function($scope,Restangular){


this.postbody = { "Filter": 700 } ;
$scope.items = {};
Restangular.all('allPrd').post(this.postbody).then(function(data){
   $scope.items = Restangular.copy(data.tiles);
   console.log($scope.items);
})

});

并在您的HTML中:

<div ng-controller="prd as prd2">
   <div ng-repeat='item in items'>
     {{item}}  
</div>
</div>

$scope是您HTMLcontroller之间的粘合剂。