【问题标题】:How access form in ng-repeat?如何在 ng-repeat 中访问表单?
【发布时间】:2017-11-24 16:43:59
【问题描述】:

Here 是关于表单的明确示例:

<div ng-form="namesForm_{{$index}}" ng-repeat="name in names">
<input type="text"
       name="input_{{$index}}_0"></input>
<!-- ... -->

好的,但是我应该如何从表单访问$valid 字段?例如,这工作:

{{namesForm_$index.$valid}}

即使{{namesForm_$index}} 输出0

{{}}解析变量名之前需要“内联”$index。该怎么做?

【问题讨论】:

  • 你想在哪里访问它?在 ng 禁用?在表单内的自定义指令中?你想在屏幕上输出值吗?这是这里缺少的重要细节

标签: javascript angularjs angularjs-forms


【解决方案1】:

在单个 {{ }} 表达式中获取它并不容易,但如果您只想在接受没有把手的表达式的指令中使用它(例如 ng-disabled),您可以实现:

<div ng-app>
    <ng-form name="namesForm_{{$index}}" ng-repeat="name in [1, 2]">
      <input type="text" 
             placeholder="{{$index}}"
             ng-required="true"
             ng-model="test"
             name="hey" />
      
      <button ng-disabled="!namesForm_{{$index}}.$valid">
        send
      </button>
     
    <br />
</ng-form>
  
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script>

【讨论】:

    【解决方案2】:
    {{ IsFormValid($index) }}
    
    $scope.IsFormValid = function(index) {
       var form = angular.element("formName" + index);
       return form.$valid;
    };
    

    更新

    工作示例:

    {{ IsFormValid($index) }}
    
    $scope.IsFormValid = function(index) {
       var form = angular.element(document.getElementById('#bucketForm-' + index);
       return form.$valid;
    };
    

    新方法

    以下是动态 ngModel 的示例,表单名称也可以复制:

    $scope.formData = {};
    $scope.formData = {
      settings:
      {
        apiEndpoint: '',
        method: 'get'
      },
      parameters: {}
    };
    
    <div class="form-group" ng-repeat="parameter in apiParameters">
      <label for="{{parameter.paramName}}" class="col-sm-2 control-label">{{parameter.paramTitle}}</label>
      <div class="col-sm-3">
        <input type="text" class="form-control" name="{{parameter.paramName}}" id="{{parameter.paramName}}" ng-model="formData.parameters[parameter.paramName]" placeholder="{{parameter.paramTitle}}">
      </div>
    </div>
    

    【讨论】:

    • 不,不,不。问题是当它具有动态名称时如何获取表单对象:)
    • 好的,那么您可能想要调用一个函数,将 $index 作为参数发送并返回表单名称或者表单是否有效...... {{ IsFormValid($index) }}
    • 感谢您的快速回复,但angular.element("formName" + index) 给了我Looking up elements via selectors is not supported by jqLite :(
    • 我明白了,让我再查一下。
    • 我已经更新了示例,但现在我有了Referencing DOM nodes in Angular expressions is disallowed!,因为我正在尝试设置类值。
    猜你喜欢
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多