javascript - ng-repeat 内的 ng-form 不更新子表单。$subscribed

标签 javascript angularjs angular-forms

我正在尝试在 ng-repeat 中创建表单,除了提交按钮之外一切都工作正常。提交按钮放置在主表单中,对于所有子表单都是通用的。
如果单击提交按钮,mainForm.$subscribed 会更新,但 userForm.$subscribed 不会更改。有什么解决办法吗?

 angular.module("sampleApp", [])
   .controller('sampleCtrl', function($scope) {
     $scope.users = [{},{}];
   })
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.5/angular.js"></script>

<div ng-app="sampleApp" ng-controller="sampleCtrl">
  <form name="mainForm" novalidate>
    <input type="text" name="school" ng-model="school" required>
      main form input valid=>{{mainForm.school.$valid}}
    <div ng-repeat="user in users">
      <ng-form name="userForm">
        <input type="text" ng-model="user.name" name="name" required>
        sub form input valid=>{{userForm.name.$valid}} | sub form submit=>{{userForm.$submitted}}
      </ng-form>
    </div>
    <button type="submit">Submit</button>
    Form valid=>{{mainForm.$valid}} | Main From submit => {{mainForm.$submitted}}
  </form>
  
</div>

最佳答案

简介

因此,我向按钮添加了一个 ng-click 处理程序,以便您也可以设置内部表单的提交状态。

我遇到的唯一困难是实际获取表单引用,但我添加了使用 ng-init 调用的函数 $scope.setUserForm 。解决方案模式来自:https://stackoverflow.com/a/23862411/1688441

此外,请记住您需要一组用户表单来保存引用。单击后,您将遍历这些元素并设置提交的内容。

代码

 angular.module("sampleApp", [])
 .controller('sampleCtrl', function($scope) {

     $scope.UserForms = [];
     $scope.setUserForm = function(form) {
         $scope.UserForm = form;
         $scope.UserForms.push(form);
     }

     $scope.forms = {};
     $scope.users = [{}, {}];

     $scope.handleClick = function() {

         $scope.UserForms.forEach(function(element) {
             element.$submitted = true;
         });

     };

 })
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.5/angular.js"></script>

<div ng-app="sampleApp" ng-controller="sampleCtrl">
  <form name="mainForm" novalidate>
    <input type="text" name="school" ng-model="school" required>
      input valid=>{{mainForm.school.$valid}}
    <div ng-repeat="user in users">
      <ng-form name="userForm">
 <div ng-init="setUserForm(userForm);"></div>
        <input type="text" ng-model="user.name" name="name" required>
        input valid=>{{userForm.name.$valid}} | form submit=>{{userForm.$submitted}}
      </ng-form>
    </div>
    <button type="submit" ng-click="handleClick()">Submit</button>
    Form valid=>{{mainForm.$valid}} | From submit => {{mainForm.$submitted}}
  </form>
  
</div>

关于javascript - ng-repeat 内的 ng-form 不更新子表单。$subscribed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46704726/

相关文章:

javascript - 动态异步 Mocha 测试

Javascript:调用两次的onload函数

javascript - HTML 和 AngularJS 中的切换按钮

angular - 响应式(Reactive)表单中电子邮件和电话号码验证面临问题

javascript - Angular 4 - 使用 Enter 关注下一个元素

php - 正则表达式求反数

javascript - Href 上的点击事件的 JQuery

javascript - Controller 函数未被调用

java - selenium 3 AngularJS 单选无法选择在 selenium 2.53 中工作的内容

Angular react 形式模式验证器仅允许文本、数字和一些字符