$ scope.var在angularjs中给出undefined

时间:2014-04-24 07:50:15

标签: angularjs ng-pattern

我正在使用angularjs在文本框上进行客户端验证,我只需要输入字母数字字符。如果文本框保留为空或输入了非字母数字字符,则submitform会向JS发送'false',这是所需的,但问题是它不会传递非字母数字字符本身(在范围内)。

JSP文件:

    <form name="addressForm" method="post" 
ng-submit="submitform(addressForm.$valid)" novalidate>
    ..
    <input ng-model="address" type="text" 
**ng-pattern**="/^[a-zA-Z0-9 ]*$/" required="true"/>

JS档案:

$scope.submitform= function(isValid){
var inputAddr = $scope.address;
alert(inputAddr);  //coming as undefined
...

现在,当我在jsp的输入框'address'中输入一个字母数字字符时,它会在JS中提醒我 undefined (可能是因为过滤了字母为非字母数字的模式)。如果我删除ng-pattern,它会传递submitForm传递'true',好像每个输入都是“按预期”。我想访问$ scope.address的原因是检查和值并显示“空”和“非字母数字”验证的不同错误消息。

感谢任何帮助!

2 个答案:

答案 0 :(得分:6)

当模型无效时,该值不会分配给模型。如果要查看用户输入的内容,您需要检查$ viewValue:

您必须在输入中添加name属性,因此请将输入html更改为:

<input ng-model="address" type="text" name="address"
ng-pattern="/^[a-zA-Z0-9 ]*$/" required="true"/>

并将提交功能更改为

$scope.submitform = function(isValid) {
    console.log($scope.addressForm.address.$viewValue);  
}

答案 1 :(得分:1)

听起来你只需要知道验证错误是什么。

您可以检查$error属性FormController(在您的情况下为addressForm)以查看已通过或失败的验证。

例如,如果输入为空,那么&#34; required&#34;验证将失败,addressForm.$error.required将是Array,其中包含未通过此验证的输入。

如果&#34;要求&#34;验证成功,然后addressForm.$error.required将只是false

您可以非常轻松地在角度表达式中使用它:

<p ng-show="addressForm.$error.required">This field is required.</p>

或者您可以通过与视图关联的$scope对象访问表单:

if ($scope.addressForm.$error.required) {
   // required validation failed
}

查看FormControllerngModelController的文档。