我有一張表,我從服務器可以將新行推送到客戶端。在一些列的我用一個指令:插入新項目時觸發指令手錶
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重建這一點,但確實anyony現在怎麼當物品被插入第一次手錶可以被觸發?值(newValue,oldValue)來自哪裏?因爲oldValue是錯誤的。
編輯:只是要更清楚。 newValue
和oldValue
不是他們undefined
當我推出新行。
'全亂了OLDVAL '和'newVal'都以'undefined'開頭。所以當你第一次設置你的數據時,手錶當然會開火,因爲'newVal'將會有實際的數據。 – senschen
當我調試時,我可以看到它不是'undefined'。然後它繼續前進,並把CSS類 – MrProgram