我正在尝试构建一个自定义表单,其中一些输入字段用于使用引导程序的预输入更新列表。
add('language', $item) 只是将 $item 添加到 snippet.languages (我在我的控制器中使用一种方法来更新任何列表)并将languageTh重置为''。Badges 只是创建了一个无序列表,其中包含每种语言的标记和一个小十字以将其从 snippet.languages 数组中拼接起来。
<input class="main-search" type="text" name="subscriber" typeahead-min-length="1" ng-model="languagesTh" typeahead-wait-ms="500" typeahead="languagesTh for languagesTh in getLanguages($viewValue)|filter:$viewValue" typeahead-on-select="add('languages', $item)" placeholder="Add a language">
<badges badge-class="warning" badge-list="snippet.languages"></badges>
<span class="error" ng-show="form.snippet.languages.$error.required">Languages are required</span>
我的问题是,如何创建一个自定义控制器,当语言列表为空时自动将表单设置为无效?
如果列表为空,我尝试添加不为空的badgelist指令使模型无效,但是当我修改内容时甚至不会调用unshift ...
angular.directive('notEmpty', function() {
返回 {
要求:'ngModel',
链接:函数(范围,榆树,attrs,ctrl){
ctrl.$parsers.unshift(function(viewValue) {
if(viewValue && viewValue.length > 0) {
ctrl.$setValidity('notEmpty', true);
返回视图值;
} 别的 {
ctrl.$setValidity('notEmpty', false);
返回未定义;
}
});
}
};
为特定对象创建表单控件的最佳方法是什么?
更新
我目前的工作是:
$scope.$watch('badgeList', function(newVal, oldVal) {
if(newVal && oldVal && !(newVal && newVal.length > 0)) {
$scope.$parent.form.$setValidity($scope.badgeControl+'.required', false);
} 别的 {
$scope.$parent.form.$setValidity($scope.badgeControl+'.required', true);
}
}, 真的);
但是,这迫使我链接到父级(如果我开始使用自定义表单名称,我什至必须在范围内传递表单名称),这似乎不是一个非常简单的解决方案。