什么时候" $ viewValue"成为"未定义"?

时间:2016-11-03 02:49:18

标签: angularjs

以下是我在输入文本中计算值长度的示例:



let app = angular.module('myApp', []);
app.controller('myController', function ($scope) {
  $scope.submit = function ($event, form) {
    $event.preventDefault();
    
    alert(form.myinput.$viewValue.length)
  };
});

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<form id="myForm" ng-model="myForm" name="myForm" novalidate ng-app="myApp" ng-controller="myController">
  <input ng-model="myinput" name="myinput" />
  <a href="#" ng-click="submit($event, myForm)">Submit</a>
</form>
&#13;
&#13;
&#13;

问题:如果输入中的值为null或为空(输入之前没有包含任何内容),则在单击submit时会抛出此错误:

  

TypeError :无法读取属性&#39;长度&#39;未定义的       在a。$$ childScopeClass。$ childScopeClass。$ scope.submit

然后,我尝试在输入中输入内容,将其删除并再次点击submit。它应该工作。

我的问题:对于input[type=text],是否有default value属性$viewValue

我的意思是:如果值为null或为空,form.myinput.$viewValue应为''。因此,长度必须为0

3 个答案:

答案 0 :(得分:2)

试试这个:

首先检查文本框的nullempty值,然后根据该值执行操作。

var app = angular.module('myApp', []);
app.controller('myController', function ($scope) {
 $scope.submit = function () {
    if($scope.myinput != null && $scope.myinput.length > 0) {
    alert($scope.myinput.length);
      } else {
        alert("Please enter the text");
        }
  };
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<form id="myForm" name="myForm" novalidate ng-app="myApp" ng-controller="myController">
  <input ng-model="myinput" name="myinput" />
  <button ng-click="submit()">Submit</button>
</form>

答案 1 :(得分:1)

您需要通过示波器访问它。 $ scope.form.myinput。$ viewValue.length

话虽如此,我不相信控制者应该知道形式,因为形式是一种观点概念。与表单变量有关的任何内容都不应该进入控制器。我很擅长将$ scope传递给你的控制器并使用控制器作为语法。

答案 2 :(得分:0)

我将如何做到这一点。这仅适用于Angular 1.3或更高版本,因为1.2不支持控制器。

cmd.exe
let app = angular.module('myApp', []);
app.controller('myController', function () {
  var vm = this;
  vm.submit = function () {
    alert(vm.myinput);
  };
});