最近、JqueryUIオートコンプリートウィジェットで使用するAngularJSディレクティブを作成しようとしました。ディレクティブは次のように使用されます。
<input type="text" auto-comp ng-model="lan" />
オートコンプリートウィジェットとして機能し、選択したアイテムをモデル$scope.lanに保存することになっています。
最終的には成功しましたが、「input」タグをラップする「div」タグを配置する必要があることがわかりました。
<div><input type="text" auto-comp ng-model="lang" /></div>
「div」ラッピングがないと、Chromeはエラーを報告します:TypeError:undefinedのプロパティ'nodeValue'を設定できません
使用されるライブラリは次のとおりです。jquery1.8.3jqueryUI 1.9.2 anglejs 1.0.3
jsfiddlehttp : //jsfiddle.net/QSBvh/23/にコードをアップロードしました。div を削除して結果を確認できます。
以下はディレクティブです:
angular.module('myApp', []).
directive('autoComp', function () {
return function(scope, element, attrs) {
$(element).autocomplete({
source: scope.availableTags,
select: function(event, ui) {
scope.lan = ui.item.value;
scope.$apply();
}
});
}
});
新しい発見。.autocompleteを中に入れると
scope.$watch("availableTags", function(value) {});
突然、「div」ラッピングは必要なくなりました。非常に奇妙な。
angular.module('myApp', []).
directive('autoComp', function () {
return function(scope, element, attrs) {
scope.$watch("availableTags", function(value) {
$(element).autocomplete({
source: scope.availableTags,
select: function(event, ui) {
scope.lan = ui.item.value;
scope.$apply();
}
});
});
}
});