默认情况下,如何将ng-model值设置为空字符串

时间:2015-12-23 18:42:07

标签: javascript angularjs angularjs-scope angularjs-ng-model

这是我的代码:

 <div ng-app="myApp" ng-controller="myCtrl">
    Name: <input ng-model="myInput.name" />
    age: <input ng-model="myInput.age" />

    <pre>
      {{myInput | json}}
    </pre>
  </div>

  <script type="text/javascript">
    angular.module('myApp', [])
      .controller('myCtrl', function($scope) {
        $scope.myInput = {};
      });
  </script>

默认情况下,空字符串未设置为ng-model。

默认情况下,如何将所有myInput值设置为&#34;&#34; ?

以下是plnkr

更新

假设myInput字段超过100个。我必须手动将其设置为&#39; &#39; ?

更新2:

Pankaj Parkar指令运作良好。但当然,它将所有模型值设置为&#39; &#39; 。如果模型为空,如何将模型设置为空字符串?我检查了attrs.value == undefined但没有任何帮助。

4 个答案:

答案 0 :(得分:3)

有两种方法可以做到。

在控制器中:

.controller('myCtrl', function($scope) {
    $scope.myINput = {
        name: '',
        age: ''
    };
});

或在视图中

Name: <input ng-model="myInput.name" ng-init="myInput.name=''" />
age: <input ng-model="myInput.age" ng-init="myInput.age=''" />

答案 1 :(得分:2)

您可以使用object literal初始化变量myInput。这将确保在加载时将它们设置为空字符串

$scope.myInput = {
      name: '', 
      age: ''
    };

编辑:如果要初始化$scope.myInput对象中的所有值,可以使用以下JS代码:

Object.keys($scope.myInput).forEach(function(key, index) {
   $scope.myInput[key] = '';
});

或者您可以使用某些库(例如underscorelodash)来迭代myInput对象中的值。我假设myInput对象中的所有值的数据类型为String。如果存在其他数据类型,例如Array,则可以在 forEach()块中插入该逻辑,并相应地初始化值。

答案 2 :(得分:2)

你可以有一个指令,负责将默认值设置为''

<强>标记

input empty-input ng-model="myInput.name" /> <br> <br>
age: <input empty-input ng-model="myInput.age" />

<强>指令

.directive('emptyInput', function($parse) {
    return {
      require: '?ngModel',
      link: function(scope, element, attrs, ngModel) {
        //ngModel should be there & it should be of type text
        if (angular.isObject(ngModel) &&
          (!attrs.type || attrs.type === 'text')) {
          var model = $parse(attrs.ngModel);
          model.assign(scope, '');
        }
      }
    }
});

您可以循环访问对象并将每个属性设置为''。但这有限制,对于某些属性,您不希望将值更改为''。那么指令方式将更可取,而不是在循环中添加条件。

Demo here

仅当模型为空时将模型设置为空字符串

.directive('emptyInput', function ($parse) {
            return {
                require: '?ngModel',
                link: function (scope, element, attrs, ngModel) {
                    var ngModelGet = $parse(attrs.ngModel);
                    scope.$watch(attrs.ngModel, function () {
                        if (ngModelGet(scope) == undefined && angular.isObject(ngModel) && (!attrs.type || attrs.type === 'text')) {
                            var model = $parse(attrs.ngModel);
                            model.assign(scope, '');
                        }
                    });
                }
            }
        });

答案 3 :(得分:0)

您可以使用以下代码获取密钥:

var attributes = Object.keys(myInput);

for (i = 0; i < attributes.length; i++){
   myInput[attributes[i]] = '';  
}

然后遍历属性并将它们分配给空值,然后将它们重新分配给myJSONObject。 我假设你的对象是一个JSON对象。