AngularJS'控制器为'和形式。$有效

时间:2015-05-05 10:03:43

标签: angularjs angularjs-validation

我想检查一个角度控制器内的表格是否有效。使用$ scope时这似乎很简单,但是我无法使用'控制器作为'句法。

当我尝试访问表单时。$ valid我收到错误消息"无法读取属性' $ valid'未定义"

plunkr:http://plnkr.co/edit/w54i1bZVD8UMhxB4L2JX?p=preview

HTML

<div ng-app="demoControllerAs" ng-controller="MainController as main">
  <form name="contactForm" novalidate>
    <p>
      <label>Email</label>
      <input type="email" name="email" ng-model="main.email" required />
    </p>
    <p>
      <label>Message</label>
      <textarea name="message" ng-model="main.message" required></textarea>
    </p>
    <input type="submit" value="submit" ng-click="main.submit()" />
  </form>
</div>

JS

var app = angular.module('demoControllerAs', []);

app.controller('MainController', [function () {
    var main = this;

    main.submit = function () {
        var isValid = main.contactForm.$valid;
        console.log(isValid);
    };
}]);

4 个答案:

答案 0 :(得分:10)

你可以像@ ons-jjss那样建议但是如果你不想将$scope注入你的控制器,那么只需将form名称改为

<form name="main.contactForm" novalidate>

它会像魅力一样起作用。

答案 1 :(得分:4)

您需要以这种方式使用:$scope.contactForm.$valid

修改

要使用上述语法,需要在控制器中输入$ scope。

app.controller('MainController', function($scope) { 
  //code 
} 

答案 2 :(得分:0)

您需要在表单名称属性中使用main.contactForm然后才能解决。 见这个

`http://plnkr.co/edit/us8MKU3LZ7pnLV66xIrv?p=preview`

答案 3 :(得分:-1)

您可以将表单作为参数传递给函数提交为 ng-click =“main.submit(contactForm)

然后在控制器方法

中验证它