我想对表单的字段执行一些复杂的验证,其中字段验证绑定在一起或依赖于数据库信息,所以我不想测试HTML中的所有内容。目前,我有这个:
<select ng-options="i as i for i in parameters[offerType].SomeKey"
ng-model="itemSelected.aQuiteLongProperty[offerType].SomeKey.parameterValue"
ng-change="validateSomeKey(itemSelected.aQuiteLongProperty[offerType].SomeKey.parameterValue)">
</select>
---
$scope.validateSomeKey = function (val) {
// check if the data is consistent
};
正如您所看到的,ng-model
有点冗长,所以我想避免ng-change
指令中的重复。有没有办法访问select
/ input
新值(选择的选项或输入的数据),而不是像How to Assign value with ng-change in angular js那样,但是以通用的方式?
我希望有类似的东西:
<select ng-options="i as i for i in parameters[offerType].SomeKey"
ng-model="itemSelected.aQuiteLongProperty[offerType].SomeKey.parameterValue"
ng-change="validateSomeKey($this.value)">
</select>
我试图检查this
对象,我没找到我想要的数据......
答案 0 :(得分:1)
您不需要在ngChange
中传递所选值,可以使用scope
在控制器/指令中访问它:
$scope.validateSomeKey = function(){
/* do something with
$scope.itemSelected.aQuiteLongProperty[offerType].SomeKey.parameterValue */
}
或者您可以使用ngInit
<select
ng-init="selectedValue = model.aVeryLongParentProperty.aVeryLongChildProperty"
ng-model="selectedValue"
ng-options="i.name for i in items" ng-change="changed(selectedValue)">
<option value=""></option>
</select>
答案 1 :(得分:0)
这个答案只是为了将问题标记为已回答,即使我没有想到的答案似乎也可能。如果有人(例如Angular的未来版本)找到原始问题的答案,我会接受它:)
我终于重构了我的代码,因为我的验证器变得更复杂了:
<select ng-options="i as i for i in parameters[offerType].SomeKey"
ng-model="itemSelected.aQuiteLongProperty[offerType].SomeKey.parameterValue"
ng-change="validate('SomeKey', itemSelected)">
</select>
我最后有一些层(因为我将有大约100个验证器,我想出了一个灵活的结构......),我得到了验证器,例如:
validateSomeKey: function (key, $scope, item) {
// offerType = item.some.propertyOffer.value
// and access through item.aQuiteLongProperty[offerType][key].parameterValue
},
我仍然需要再次写完整个变量“path”,但我也可以访问其他参数(这是我现在需要的)。