我在选择之后尝试禁用选项。这取决于与每个'cusomter_no'相关联的'perf_no',如以下代码所示。当ngChange仍在更新模型时,它会更新关联对象中“禁用”的值。 debome的ngModelOptions对我不起作用。 有没有办法在ngChange完成后进行回调以更新该对象的'disabled'值?或者更好的方法来实现这一目标?提前致谢。
<div class="session-registrant-field field-dropdown">
<label for="">{{nameLbl}}</label>
<select
ng-model="affiliateSelected[cartPerf.perf_no][$index]"
ng-change="changedAffiliate(affiliateSelected, cartPerf.perf_no, $index, affiliateSelected[cartPerf.perf_no][$index].customer_no)"
ng-options="affiliate.fname + ' ' + affiliate.lname disable when affiliate.disabled for affiliate in affiliates | filter:cartPerf.perf_no | orderBy:affiliate.customer_no:true track by affiliate.customer_no"
required>
<option value="" disabled="">-- Select person --</option>
</select>
</div>
控制器代码段
$scope.affiliates = [
{"id":"1","perf_no":"154","perf_dt":"2017-09-18T10:00:00","customer_no":"-10003","fname":"","lname":"Add New Child","validation_pass_age":"Y","validation_pass_prereq":"Y","ask_birthdate":"Y","ask_current_grade":"Y","ask_next_grade":"Y","ask_email":"N","bdatereq":"Y","age_validation_ind":"Y","min_age":"10","max_age":"25","rel_type_id":"10003"},
{"id":"2","perf_no":"154","perf_dt":"2017-09-18T10:00:00","customer_no":"-10002","fname":"","lname":"Add New Adult","validation_pass_age":"Y","validation_pass_prereq":"Y","ask_birthdate":"Y","ask_current_grade":"Y","ask_next_grade":"Y","ask_email":"N","bdatereq":"Y","age_validation_ind":"Y","min_age":"10","max_age":"25","rel_type_id":"10002"},
{"id":"3","perf_no":"154","perf_dt":"2017-09-18T10:00:00","customer_no":"2762","fname":"Ryan","lname":"Jones","age":"22","validation_pass_age":"Y","validation_pass_prereq":"Y","ask_birthdate":"Y","ask_current_grade":"N","ask_next_grade":"N","ask_email":"Y","birthdate":"07\/13\/1995","bdatereq":"Y","eaddress":"","age_validation_ind":"Y","min_age":"10","max_age":"25","rel_type_id":"10003"},
{"id":"4","perf_no":"154","perf_dt":"2017-09-18T10:00:00","customer_no":"2700","fname":"John","lname":"Doe","age":"","validation_pass_age":"Y","validation_pass_prereq":"Y","ask_birthdate":"Y","ask_current_grade":"N","ask_next_grade":"N","ask_email":"Y","birthdate":"02\/22\/1988","bdatereq":"Y","eaddress":"","age_validation_ind":"Y","min_age":"10","max_age":"25","rel_type_id":"10003"},
{"id":"5","perf_no":"154","perf_dt":"2017-09-18T10:00:00","customer_no":"2701","fname":"Rick","lname":"Deckard","age":"","validation_pass_age":"Y","validation_pass_prereq":"Y","ask_birthdate":"Y","ask_current_grade":"N","ask_next_grade":"N","ask_email":"Y","birthdate":"02\/22\/1988","bdatereq":"Y","eaddress":"","age_validation_ind":"Y","min_age":"10","max_age":"25","rel_type_id":"10002"},
{"id":"1","perf_no":"93","perf_dt":"2017-09-18T10:00:00","customer_no":"-10003","fname":"","lname":"Add New Child","validation_pass_age":"Y","validation_pass_prereq":"Y","ask_birthdate":"Y","ask_current_grade":"Y","ask_next_grade":"Y","ask_email":"N","bdatereq":"Y","age_validation_ind":"Y","min_age":"10","max_age":"25","rel_type_id":"10003"},
{"id":"2","perf_no":"93","perf_dt":"2017-09-18T10:00:00","customer_no":"-10002","fname":"","lname":"Add New Adult","validation_pass_age":"Y","validation_pass_prereq":"Y","ask_birthdate":"Y","ask_current_grade":"Y","ask_next_grade":"Y","ask_email":"N","bdatereq":"Y","age_validation_ind":"Y","min_age":"10","max_age":"25","rel_type_id":"10002"},
{"id":"3","perf_no":"93","perf_dt":"2017-09-18T10:00:00","customer_no":"2762","fname":"Ryan","lname":"Jones","age":"22","validation_pass_age":"Y","validation_pass_prereq":"Y","ask_birthdate":"Y","ask_current_grade":"N","ask_next_grade":"N","ask_email":"Y","birthdate":"07\/13\/1995","bdatereq":"Y","eaddress":"","age_validation_ind":"Y","min_age":"10","max_age":"25","rel_type_id":"10003"},
{"id":"4","perf_no":"93","perf_dt":"2017-09-18T10:00:00","customer_no":"2700","fname":"John","lname":"Doe","age":"","validation_pass_age":"Y","validation_pass_prereq":"Y","ask_birthdate":"Y","ask_current_grade":"N","ask_next_grade":"N","ask_email":"Y","birthdate":"02\/22\/1988","bdatereq":"Y","eaddress":"","age_validation_ind":"Y","min_age":"10","max_age":"25","rel_type_id":"10003"}
]
$scope.changedAffiliate = function(selectedItem, cartPerfNo, index, affiliateCustomer_no) {
$.each($scope.affiliates, function(i) {
if(this.perf_no === cartPerfNo && this.customer_no === affiliateCustomer_no){
this['disabled'] = true;
}
});
}
$scope.getDisableCondition = function(affiliate, cartPerfNo, index){
$.each($scope.affiliates, function(i) {
if(this.disabled === true){
console.log(this);
return affiliate.customer_no === this.customer_no;
}
if(this.disabled === false || this.disabled === undefined){
return false;
}
//console.log(this);
});
}
答案 0 :(得分:0)
嗯,也许它不漂亮,但是做好自己的工作(plnkr):
$scope.passMe;
$scope.changedAffiliate = function(selectedItem, cartPerfNo, index, affiliateCustomer_no) {
if ($scope.passMe) {
$scope.affiliates.forEach((aff)=>{
if (aff.perf_no == $scope.passMe[0] && aff.customer_no == $scope.passMe[2]) {
selectedItem[$scope.passMe[0]][ $scope.passMe[1]] = aff
}
})
$scope.passMe = null;
}
$scope.passMe = [cartPerfNo,index,affiliateCustomer_no]
$.each($scope.affiliates, function(i) {
if(this.perf_no === cartPerfNo && this.customer_no === affiliateCustomer_no){
this['disabled'] = true;
}
});
}
这是基于以下事实:changedAffiliate在被禁用后将再运行1次。