我有1 ng-repeat和ng-change上的输入:
$scope.roomsHotel = '',
$scope.roomsOption = ['1','2','3','4','5']
$scope.numberRoom = function(index){
$scope.roomCount =this.roomsHotel
}
并且在视图中按$index
:
<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没问题我可以让它工作但是在控制器上我需要在提交之前进行验证,但是bedType0
和bedType1
等等给我未定义:
$scope.submitHotelsCtrl = function( numberOfRooms, bedType,$index) {
$scope.submitted = true;
if ($scope.hotelForm.numberOfRooms.$valid &&
$scope.hotelForm.bedType.$$rawModelValue.$valid) {
console.log('hi')}
}
我尝试循环投掷roomsOption
或其他方式,但非他们的工作,我尝试在plnkr任何帮助将节省我的一天
答案 0 :(得分:0)
您在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