插入新项目时会触发指令监视

时间:2016-04-18 14:44:03

标签: angularjs

我有一个表,我从服务器可以将新行推送到客户端。在某些列中,我使用了一个指令:

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错了..

编辑:只是为了更清楚一点。当我推出新行时,newValueoldValue不是undefined

2 个答案:

答案 0 :(得分:0)

可能是oldValue未定义/ null,但随后parseFloat将其转换为可处理的东西。也许试着检查一下围绕parseFloat的oldValue行为?

答案 1 :(得分:0)

这对我来说是一个很糟糕的错误...当我更改我保存行的数组时,它会变得混乱,track by $index搞砸了......我把它改成{{1 }}