【问题标题】:Angular validate form with dynamic name具有动态名称的角度验证表单
【发布时间】:2014-11-25 12:21:25
【问题描述】:

通常要在 Angular 中验证表单,我会在 ng-submit 指令上使用类似的东西:

<form name="formName" ng-submit="formName.$valid && submitForm()"></form>

当表单具有我在构建表单时设置的名称时,这非常有用。但是,在我目前的情况下,我正在尝试基于对象列表创建多个表单。在这种情况下,每个表单都有一个动态确定的名称。

当用户提交其中一个表单时,如何在为该表单运行 submitForm() 函数之前对其进行验证?

这是简化问题的 jsfiddle:http://jsfiddle.net/flyingL123/ub6wLewc/1/

我的问题是,如何访问表单的名称以对其进行验证?这是小提琴的代码:

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

app.controller("AppController", ['$scope', function($scope) {
  $scope.forms = [{
    id: 1,
    value: "val1"
  }, {
    id: 2,
    value: "val2"
  }, {
    id: 3,
    value: "val3"
  }];

  $scope.submitForm = function() {
    alert('submitted');
  }
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.1/angular.min.js"></script>
<div id="app" ng-app="app" ng-controller="AppController">
  <div class="formWrapper" ng-repeat="form in forms">
    <form name="{{ 'form' + form.id }}" ng-submit="submitForm()" novalidate>
      <input ng-model="form.value" required />
      <button type="submit">Submit</button>
    </form>
  </div>
</div>

【问题讨论】:

    标签: javascript angularjs forms validation


    【解决方案1】:

    您始终可以使用this 访问模板中的范围。

    {{this.foo === foo}} <!-- This will always show "true" -->
    

    因此,您可以简单地使用this[myDynamicFormName] 访问表单:

    <form name="{{'form' + form.id}}" ng-submit="this['form' + form.id].$valid && submitForm()"></form>
    

    【讨论】:

    • 特价一送二。
    • 您也可以通过将其放在表单元素中将其别名为范围变量:&lt;p hidden ng-init="htmlForm=this['form' + form.id]"&gt;&lt;/p&gt;
    • 请注意,您不能使用连字符的名称来正常工作
    猜你喜欢
    • 2015-01-21
    • 2021-09-26
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 2013-02-17
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多