【问题标题】:Get $index number of ng-repeat in controller获取控制器中 ng-repeat 的 $index 编号
【发布时间】:2017-12-23 04:19:34
【问题描述】:

我有 1 次 ng-repeat 并在 ng-change 上提交了输入:

$scope.roomsHotel = '',
$scope.roomsOption = ['1','2','3','4','5']
$scope.numberRoom = function(index){
  $scope.roomCount =this.roomsHotel
}

并且可以通过$index ng-repeat 该曲目:

<div class="row" ng-repeat="rooms in roomsOption | limitTo: roomCount track by $index">

在这个 ng-repeat 中,我有一些 md-select 需要在提交之前进行验证:

<div>
  <md-input-container class="md-block col-md-12" flex>
    <label>Bed Type </label>
    <md-select 
      ng-model="bedType[$index]"
      name="bedType{{$index}}"
      ng-required="true"
      ng-change="bed()">
      <md-option 
        ng-repeat="bed in bedOption" 
        ng-model="bedHotel"
        ng-value="bed"
        ng-messages>{{bed}}
      </md-option>
    </md-select>
    <div
      ng-messages="hotelForm['bedType'+$index].$error"
      ng-if="hotelForm['bedType'+$index].$invalid &&
        (submitted || hotelForm['bedType'+$index].$touched)">
      <div ng-message="required">Type of bed is require</div>
    </div>
  </md-input-container>
</div>

对于 ng-message 没问题,我可以让它工作,但是在控制器上我需要在提交之前验证,但是 bedType0bedType1 等等给我 undefined :

$scope.submitHotelsCtrl = function( numberOfRooms, bedType,$index) {
  $scope.submitted = true;
  if ($scope.hotelForm.numberOfRooms.$valid &&
    $scope.hotelForm.bedType.$$rawModelValue.$valid) {
    console.log('hi')}
  }

我尝试循环抛出 roomsOption 或其他方式,但它们都不起作用,这是我尝试在 plnkr 上进行的任何帮助将节省我的一天

【问题讨论】:

    标签: javascript angularjs angular-material


    【解决方案1】:

    您在 plunker 中提供的代码中几乎没有问题,

    1) 您的 submitHotelsCtrl 函数需要一些参数,但您没有发送任何参数,您至少应该将 $index 传递给您的函数,因为您在那里使用它。

    html

    <md-button class="md-accent md-raised" ng-click="submitHotelsCtrl($index)" id="submit" >search</md-button>
    

    js

    $scope.submitHotelsCtrl = function(index) {
    }
    

    2) 即使您发送 $index,因为您的按钮超出了 ng-repeat 的范围,$index 也将是未定义的,因此您应该将您的按钮移动到 ng-repeat 内或使用其他数字。

    <div class="row" ng-repeat="rooms in roomsOption | limitTo: roomCount track by $index">
        <md-button class="md-accent md-raised" ng-click="submitHotelsCtrl($index)" id="submit" >search</md-button>    
    </div>
    

    3) 您应该更改您尝试按名称获取属性的代码

    来自

    $scope.hotelForm.bedType$index.$valid
    

    $scope.hotelForm['bedType'+index].$valid
    

    【讨论】:

    • 感谢您的回答,我通过$index 提交并测试内部更改按钮,但不适用于更改语法我之前测试并再次更改无法正常工作并且仍然未定义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    相关资源
    最近更新 更多