いくつかの入力フィールドを使用して、ブートストラップの先行入力でリストを更新するカスタム フォームを作成しようとしています。
add('language', $item) は $item を snippet.languages に追加するだけで (コントローラーで 1 つのメソッドを使用してリストを更新しています)、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',
リンク:関数(スコープ、エルム、属性、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);
}
}、 真実);
ただし、これにより親へのリンクが強制されます (カスタム フォーム名を使用し始めると、フォーム名をスコープに渡す必要さえあります)。これは、永続的な解決策とは思えません。