追加行时 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);
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);