我正在尝试构建一个自定义表单,其中一些输入字段用于使用引导程序的预输入更新列表。
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); } }, 真的);
但是,这迫使我链接到父级(如果我开始使用自定义表单名称,我什至必须在范围内传递表单名称),这似乎不是一个非常简单的解决方案。