Javascript ng模型未使用$setViewValue更新(采用jquery ui自动完成)
下面是关于JSFIDLE的完整示例: 以下是指令代码:Javascript ng模型未使用$setViewValue更新(采用jquery ui自动完成),javascript,angularjs,jquery-ui,Javascript,Angularjs,Jquery Ui,下面是关于JSFIDLE的完整示例: 以下是指令代码: app.directive('autoComplete', function() { return { scope: { 'uiSrc': '@' }, require: "ngModel", link: function(scope, el, attrs, ngModelCtrl) { el.autocomplete({ so
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
字段将被设置为autcomplete SUPPICATION value,但实际上这不会发生。我不是这方面的专家,但我有两条建议。您正在处理一个独立范围的问题。我希望我能解释一下原因,但我会把这件事推迟到更大的考虑
从指令中删除作用域:{}
。(可能不是正确的选择)
直接使用ngModel并设置它。(由于版本不匹配,您的jquery ui无法工作)
在view.fld之前添加$parent.,因为您的指令有自己的独立作用域
<input type="text" data-auto-complete="" data-ng-model="$parent.view.fld" autocomplete="off" size="28" />
我注意到升级到Angular 1.2也解决了这个问题,@Nix提供了另外两个可行的解决方案。但这是最简单的。
<input type="text" data-auto-complete="" data-ng-model="$parent.view.fld" autocomplete="off" size="28" />