ng-model - 空输入返回null

时间:2017-05-03 05:49:53

标签: javascript angularjs angular-ngmodel angularjs-ng-model

我有这个输入:

<input ng-model="data.value" type="number" placeholder="0" value="0">

当我更改输入(例如1)然后将其删除时data.value 保持null。我希望当我删除输入时data.value将0保持为默认值。

我看到了这个解决方案: Angular ng-model: empty strings should be null

这个解决方案对我有用,但我想知道是否有其他没有$watchng-change功能的解决方案。

提前致谢!

2 个答案:

答案 0 :(得分:2)

  

这个解决方案对我有用,但我想知道是否有其他解决方案没有$ watch

您找到的link,也有使用$watch

的解决方案

如果您想使用ng-change

Jus试试这个

<input ng-model="data.value" type="number" ng-change="defaultValue()" 
placeholder="0" value="0">

// controller

$scope.defaultValue=function()
{
  if($scope.data.value==null || $scope.data.value==='')
  {
    $scope.data.value=0;
  }
}
  • Directive是最好的方式之一

答案 1 :(得分:2)

  

如果我有其他输入,并且对于每个输入我想要其他默认值,我需要有很多指令

您可以在使用HTML指令时提供指令的defaultValue attr。像这样:

.directive('emptyToDefault', function () {
    return {
        restrict: 'A',
        require: 'ngModel',
        scope: {
          defaultValue: '='
        },
        link: function (scope, elem, attrs, ctrl) {
            ctrl.$parsers.push(function(viewValue) {
                if(viewValue === null) {
                    return scope.defaultValue || 0;
                }
                return viewValue;
            });
        }
    };
});

现在,您可以轻松地从外部传递不同的默认值,并在清空字符串时设置它。

HTML就像,

<input ng-model="data.value" type="number" placeholder="0" value="0" 
       empty-to-default default-value="5">

working plunker(打开控制台,注意它如何设置默认值5,因为字符串已清空且传递的值为5