带数组的 angular 和 changling dom 树

Angular and changling dom tree with array

提问人:Alexey Kolchin 提问时间:12/11/2020 最后编辑:Titus Sutio FanpulaAlexey Kolchin 更新时间:12/11/2020 访问量:64

问:

我在angular中有html组件。模板是

              <tr ng-repeat="item in documentList track by $index">
                <td>{{item.TYPE}}</td>
                <td>{{item.DATE_CREATE}}</td>
                <td>
                  <a type="button" class="btn btn-default" ng-click="delDocument(item)">Delete</a>
                </td>
              </tr>

delDocument(item) 方法是

  $scope.delDocument = function(item){
    if(confirm('Do you really want to delete document?')) {
      $.ajax('/ajax/del_document.php', {
        'method': 'POST',
        'data': {
          'id': item.ID,
        },
        'success': function(){
          i = 0;
          while(i<$scope.documentList.length) {
            if($scope.documentList[i].ID===item.ID) {
              $scope.documentList.slice(i, 1);
            }
            i++;
          }
        }
      });
    }
  }

所以我预计当用户按下删除按钮时,ajax 会删除后端的元素,然后 documentList 会发生变化,然后角度会改变 dom 树。但事实并非如此:documentList 正在更改,但 html 页面仍然相同。 为什么会这样?我做错了什么?

javascript 数组 angularjs dom

评论


答:

2赞 Viral Patel 12/11/2020 #1

执行操作后,尝试在成功函数中使用。$scope.$apply()

 $scope.delDocument = function(item){
    if(confirm('Do you really want to delete document?')) {
      $.ajax('/ajax/del_document.php', {
        'method': 'POST',
        'data': {
          'id': item.ID,
        },
        'success': function(){
          i = 0;
          while(i<$scope.documentList.length) {
            if($scope.documentList[i].ID===item.ID) {
              $scope.documentList.slice(i, 1);
            }
            i++;
          }
          $scope.$apply();
          // or blow is a safe way to use $scope.$apply();
          // if($scope.$$phase){
            // $scope.$apply();
          // }
        }
      });
    }
  }

评论

0赞 Alexey Kolchin 12/11/2020
谢谢,它有效(但使用 if($scope.$$phase) 它没有)
0赞 Viral Patel 12/14/2020
(!$scope.$$phase) 是一种反模式。如果您以正确的方式使用,您根本不需要它。$scope.$apply()$scope.$apply