Javascript ng模型未使用$setViewValue更新(采用jquery ui自动完成)

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

下面是关于JSFIDLE的完整示例:

以下是指令代码:

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" />