我有一个表,我从服务器可以将新行推送到客户端。在某些列中,我使用了一个指令:
angular.module('app').directive('highlighter', ['$timeout', function ($timeout) {
return {
restrict: 'A',
scope: {
model: '=highlighter'
},
link: function (scope, element) {
scope.$watch('model', function (newValue, oldValue) {
var nv = parseFloat(newValue);
var ov = parseFloat(oldValue);
if (nv !== ov) {
if (nv > ov) {
// apply class
element.addClass('highlightUp');
// auto remove after some delay
$timeout(function() {
element.removeClass('highlightUp');
}, 2000);
} else {
// apply class
element.addClass('highlightDown');
// auto remove after some delay
$timeout(function () {
element.removeClass('highlightDown');
}, 2000);
}
}
});
}
};
}]);
问题在于,当我从服务器端将新行推出到表中时,其中一些会触发监视,即使它是第一次并且没有任何变化。
<tbody>
<tr dir-paginate="row in vm.rows
| filter:searchText
| filter:row.IsVisible
| orderBy:sortRows:vm.sortReverse
| itemsPerPage:vm.pagination.pageSize track by $index"
data-ng-click="toggleNode(row)"
data-ng-show="row.IsVisible">
<td ng-repeat="column in vm.columns">
<span ng-if="shouldBeHighlighted">{{renderCellValue(row, column)}}</span>
</td>
</tr>
</tbody>
在plunker中重新创建它有点困难,但是现在是否可以在第一次插入物品时触发手表?值(newValue,oldValue)来自哪里?因为oldValue错了..
编辑:只是为了更清楚一点。当我推出新行时,newValue
和oldValue
不是undefined
。
答案 0 :(得分:0)
可能是oldValue未定义/ null,但随后parseFloat将其转换为可处理的东西。也许试着检查一下围绕parseFloat的oldValue行为?
答案 1 :(得分:0)
这对我来说是一个很糟糕的错误...当我更改我保存行的数组时,它会变得混乱,track by $index
搞砸了......我把它改成{{1 }}