1

我正在尝试构建一个自定义表单,其中一些输入字段用于使用引导程序的预输入更新列表。

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);
          }
        }, 真的);

但是,这迫使我链接到父级(如果我开始使用自定义表单名称,我什至必须在范围内传递表单名称),这似乎不是一个非常简单的解决方案。

4

0 回答 0