通过解析器传递值时,Angular $ scope不会更新

时间:2013-10-01 18:48:02

标签: javascript angularjs

请注意,即使通过验证的值也没有通过解析器保持原样。解析器返回正确的值,但是当调用格式化程序时,旧值仍然存在于模型中。有人可以向我解释一下吗?

这是plnkr

http://plnkr.co/edit/uSLkKtLZIU63wRou3x8V?p=preview

和代码

angular.module('timeEntryModule', []).directive('timeEntryTotalHoursInput', function() {
return {
    require: '^ngModel',
    link: function($scope, $element, $attrs, ngModel) {

        ngModel.$formatters.push(function (modelValue) {
            if (modelValue === 0) {
                return undefined;
            } else {
                return modelValue.toFixed(2);
            }
        });

        ngModel.$parsers.push(function (viewValue) {
            var tempVal = parseFloat(viewValue);
            if (tempVal) {
                ngModel.$setValidity('timeEntryInputError', true);
                ngModel.$modelValue = tempVal;
            } else {
                ngModel.$setValidity('timeEntryInputError', false);
                ngModel.$modelValue = undefined;               
            }

            return ngModel.$modelValue;            
        });
    }
};

});

angular.module('timeEntryModule').controller('TimeEntryCtrl', ['$scope', function ($scope) {

    $scope.testproperty = 2;

}]);

<!doctype html>
<html ng-app="timeEntryModule">
  <head>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js"></script>
    <script src="script.js"></script>
  </head>

  <body ng-controller="TimeEntryCtrl">
    <input ng-model="testproperty" time-entry-total-hours-input />
  </body>
</html>

提前致谢!

1 个答案:

答案 0 :(得分:0)

所以我和你的plnkr玩了,我觉得你会更好地回应模糊事件,这就是我很快想出来的 plnkr

我认为你在这种情况下可以更好地控制事物。