$ scope。$ apply和$ scope. $ digest都不会更新对象

时间:2016-01-08 09:36:45

标签: javascript angularjs

我正在使用以下ng-click功能创建groups

$scope.createGroup = function() {
  AV.Cloud.run('createUserGroup', {
groupName: $scope.initName
  }, {
success: function(result) {
  var data = JSON.parse(result);
  var json = {
    id: data.objectId,
    name: data.name,
    users: 0,
    createdAt: data.createdAt
  }
  $scope.groups.push(json);
  $scope.initName = "";
  $scope.$digest();
},
error: function(error) {
  alert(error.message);
}
  });

但是当我点击链接转到该组(位于同一页面)时,该组不会出现。我必须刷新浏览器才能显示它。我尝试了$scope.$digest()$scope.$apply(),但他们没有解决问题,只有location.reload();

AngularJS是否有另一个函数可以进行更新或重新加载以解决此问题?

修改

这就是我显示该群组的方式:

<div id="group-new" class="col-md-6">
  <h2>{{group.name}}</h2>
</div>

3 个答案:

答案 0 :(得分:2)

您是否尝试将其包装在$scope.$apply中,它应该将更改应用到您的$ scope并在之后消化。例如:

$scope.createGroup = function() {
  AV.Cloud.run('createUserGroup', {
    groupName: $scope.initName
  }, {
    success: function(result) {
      var data = JSON.parse(result);
      var json = {
        id: data.objectId,
        name: data.name,
        users: 0,
        createdAt: data.createdAt
      }
      $scope.$apply(function() {
        $scope.groups.push(json);
        $scope.initName = "";
      });
    },
    error: function(error) {
      alert(error.message);
    }
  });

答案 1 :(得分:1)

你是如何使用$scope.$apply的? 你试过吗?

success: function(result) {
    // ...

    $scope.$apply(function () {
        $scope.groups.push(json);
        $scope.initName = "";
    });
}

答案 2 :(得分:0)

也许已经有$ digest循环在运行?

尝试$ timeout(你必须将它注入你的控制器): $timeout

success: function(result){
    // ...
    $timeout(function(){
        $scope.groups.push(json);
        scope.initName = "";
    });
}

基本上它会延迟内部函数的执行(在上面的情况下:0ms),并使用$ apply触发一个新的摘要周期。它不会创建“$ digest in progress”错误,因为它在运行完成后会启动一个新的摘要。