以下是jsFiddle的完整示例: http://jsfiddle.net/m5Lgu/
以下是dircetive的代码:
app.directive('autoComplete', function() {
return {
scope: { 'uiSrc': '@' },
require: "ngModel",
link: function(scope, el, attrs, ngModelCtrl) {
el.autocomplete({
source: opts,
select: function(event, ui) {
event.preventDefault();
el.val(ui.item.label);
scope.$apply(function() { ngModelCtrl.$setViewValue(el.val()) });
}
});
}
};
});
使用指令:
<input type="text" auto-complete ng-model="view.fld" autocomplete="off" size="28">
预计fld
字段在点击时会被设置为自动填充建议值,但实际上这不会发生。
答案 0 :(得分:1)
我不是这方面的专家,但我有两点建议。您正在处理isolated scope
问题。我希望我可以解释为什么,但我会更加谨慎地推迟。
scope: {}
。 (可能不是正确的电话)。link: function (scope, el, attrs, ngModelCtrl) {
scope: {
'uiSrc': '@',
'ngModel': '='
},
el.autocomplete({
...
select: function (event, ui) {
event.preventDefault();
el.val(ui.item.label);
scope.$apply(function () {
//debugger
scope.ngModel = el.val();
//ngModelCtrl.$setViewValue(el.val())
});
}
答案 1 :(得分:1)
在 view.fld 之前添加 $ parent。,因为您的指令具有自己的隔离范围。
<input type="text" data-auto-complete="" data-ng-model="$parent.view.fld" autocomplete="off" size="28" />