追加行时 ngTable 中的奇怪行为

Strange behavior in ngTable when appending a row

In this plunk 我试图重现我的问题,但我做不到,所以这是最好的近似值。

如果单击该按钮,将向 table 添加一行。此外,行背景将在两秒后改变颜色并淡出。由于 table 中的最大行数为三,因此在添加第四行时 ngTable 将添加一页。如果您转到下一页,然后返回,在我的环境中 您会在第一页中看到第四行两秒钟,然后消失。

另一个类似的症状发生在我通过单击 header 对列进行排序时,我也得到了额外的行两秒钟,然后它消失了。

同样,这在 Plunker 中运行良好,但在我的环境中却不行。 如果我在我的环境中禁用该效果,ngTable 工作正常。

效果有冲突吗? 是否有不同的方法来实现效果?

HTML

    <table ng-table="tableParams" class="table table-bordered">
        <tbody>
            <tr ng-repeat="u in $data" 
                ng-class="{true: 'select-row', false: 'unselect-row'}[u.select]">
                <td title="'ID'">
                    {{ u.uid }}
                </td>
                <td title="'Name'">
                  {{ u.nm }}
                </td>
        </tbody>
    </table>

    <br/>
    <button ng-click="appendRow()">Append row</button>

Javascript

var app = angular.module('app', ['ngTable']);

app.controller('myCtl', function($scope,$timeout,NgTableParams) {

      $scope.data = [{
          uid: 1,
          nm: 'aaa'
      }, {
          uid: 2,
          nm: 'bbb'
      }];

      $scope.tableParams = new NgTableParams({
          count: 3
      }, {
          dataset: $scope.data
      });


      $scope.appendRow = function(){
        var len = $scope.data.length;
        $scope.data.push({ uid: len + 1, nm: 'XXXXX' });
        selectRow(len);
        $scope.tableParams.reload();
      };


     var selectRow = function(row){
        $scope.data[row].select = true;
        $timeout(function(){
            $scope.data[row].select = false;
        },2000);
    };

});

更新

这是我发现的:由于 $scope.data[row].select 的值是假的,只要有分页,ngTable 就会产生效果,即使 $scope.data[row].select 没有设置为 true预先。这个 class 转换被不必要地触发,并使 ngTable 在转换时间显示一个额外的行,然后它消失了:

.unselect-row {
    background-color: transparent;
    transition: 1.2s linear all; 
}

删除触发动画的对象成员解决了问题,否则 ngTable 会在分页时不必要地触发动画:

        $scope.data[row].select = false;
        $timeout(function(){
            delete $scope.data[row].select;
        },1000);