AngularJS指令,用于检查复选框列表中是否至少选中了一个项目
angularjs directive to check if min. one item in a list of checkboxes is selected
我正在尝试创建一个指令,该指令应检查复选框项目列表中是否至少选中了一个项目。如果没有,它应该在列表下显示一条错误消息。因此,我创建了此指令:
.directive('validateServices', [function () {
function validate(services) {
for(var x= 0;x<services.length;x++) {
if(services[x].selected) return false;
}
return true;
}
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, ele, attrs, ngModel) {
ngModel.$validators.emptyServices = function (modelValue) {
return validate(modelValue);
}
}
}
}]);
和用法:
<ul class="list" validate-services ng-model="pricelist">
<li class="item title-left"><b>Prestaties</b></li>
<li ng-repeat="price in pricelist" class="item item-checkbox" ng-click="calculateSum()">
<label class="checkbox">
<input type="checkbox" ng-model="price.selected">
</label>
{{price.name}}
</li>
</ul>
<div role="alert">
<span class="error" ng-if="submitted && pricelist.$error.emptyServices">
Vul een prestatie
</span>
</div>
但是,即使值正确,警报也不会显示。这个指令有什么问题?
ngModelController
为了获得ngModelController
验证,您需要有一个表单元素或ng-form
指令(docs)。 要创建条件错误消息,您需要访问 ngModel 的$error
对象,以便判断它何时有效/无效。
<div ng-form="priceForm">
...
<ul class="list" validate-services name="plField" ng-model="pricelist">
...
以下是条件的外观:
<span class="error" ng-if="priceForm.plField.$error.emptyServices">
命令
在指令链接函数中,您需要对ngModel
值设置手动$watch
,并在 ngModel 更改时调用验证函数:
scope.$watch('ngModel', function(newValue, oldValue) {
// this sets your ngModel's validity based on your
// validation function
ngModel.$setValidity('emptyServices', validate(newValue));
}, true);
您可以在此 plnkr 中看到一个工作示例:http://plnkr.co/edit/B1MPNBR5EC7YARKdvTO2?p=preview
相关文章:
- 当在Ember中点击一个项目时,我如何将一个活动类添加到项目列表中
- 通过另一个php应用程序将我的项目推送到Github存储库中
- angularjs移除焦点上的活动类并添加到下一个项目
- 相对于角度控制器中的另一个阵列过滤阵列项目
- 如何通过AngularJS删除一个项目
- 如何使用jquery将所选项目从一个下拉组列表(optgroup)移动到另一个下拉列表(optgroup)
- 获取每个项目中不为 null 的最后一个项目
- 在另一个项目中使用大理石测试rxjs5方法
- 使用javascript/jquery从现有数组中创建一个新数组,该数组保存项目存在的次数
- 如何在猫头鹰旋转木马中滑动所有可见项目,而不是使用上一个/下一个按钮
- Git为整个项目提供一个repo(frontend+node.js)
- 与杜兰达尔合作的第一个JavaScript项目.尝试从第三方 API 获取数据
- Asp.net 引导下拉菜单 - 选择一个项目
- 处理一个项目,想要添加以下菜单栏,并尽量减少向下滑动
- 如何将从GWT编译的JS添加/访问到另一个外部HTML / JS项目中
- 在angularJs的选择框中预先选择一个项目
- 我想在混合移动应用程序中使用Sqlite插件(Cordova)创建一个示例项目
- 如何将一个表单中的项目添加到 Rails 中另一个表单的下拉选项
- jQuery 使用 ID 作为 URL 选择一个项目
- 淡入<灯光>一个项目一个项目