jquery - 使用 jquery element.val() 时 ng-model 不会更新

标签 jquery angularjs

PLUNKR example here

我正在使用某些版本的 jquery 自动完成作为 angularjs 指令。 当 jquery 使用 element.val() 更新输入的值时,Angular 直到下一个摘要之后才注意到更改(我想)。

我的第一个想法是使用 $timeoutng-model post 摘要执行操作,但如您所见,它没有帮助。

我的第二种方法是重写元素的 val 函数来触发 input 事件,但我还没有设法使其工作。

尝试从自动完成列表中选择一个值,您会看到上面的 ng-model 没有更新。

更新

感谢您的回复。我不知道 onSelect 选项。

这是根据您的建议编写的代码

// clone user provided options 
scope.options = _.extend({}, scope.AutoCompleteOptions());

// Wrap onSelect - Force update before manipulation on ng-model
var fn = _.has(scope.AutoCompleteOptions(), 'onSelect')  ? scope.AutoCompleteOptions().onSelect : _.noop;
scope.options.onSelect = function () { 
  ngModelCtrl.$setViewValue(element.val()); 
  scope.$apply(fn);
};

scope.autocomplete = $(element).autocomplete(scope.options);

这样我就可以维护指令的接口(interface),同时保证 ng-model 是最新的。

谢谢。

最佳答案

正如您所知,问题是 Angular 不知道 jquery 插件所做的更新。幸运的是,您可以使用插件的 onSelect 回调来更新 ngModel,如下所示:

.directive("autoComplete", function() {
    return {
        restrict: "A" , 
        require: 'ngModel', // require ngModel controller
        scope: {
            AutoCompleteOptions : "=autoCompleteOptions", // use '=' instead of '&'
        },
        link: function (scope, element, attrs, ngModelCtrl) {

            // prevent html5/browser auto completion
            attrs.$set('autocomplete','off');

            // add onSelect callback to update ngModel
            scope.AutoCompleteOptions.onSelect = function() {
                scope.$apply(function() {
                    ngModelCtrl.$setViewValue(element.val());
                });
            };

            scope.autocomplete = $(element).autocomplete(scope.AutoCompleteOptions);
        }
    }
});

关于jquery - 使用 jquery element.val() 时 ng-model 不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22612650/

相关文章:

javascript - 使用正则表达式检索字符串的特定部分

javascript - jQuery Ajax 在 cordova iOS 应用程序上发送之前触发成功

jquery - 使用 JQuery 的 Uploadify 插件时为 "http error"

javascript - $(window).resize 仅在浏览器刷新时触发?

javascript - ADAL - SPA 应用程序中 Angular JS 中使用的 JavaScript,调用通过 APIGEE 公开的第三方 API,出现 CORS 错误

javascript - 使用 $resource 时捕获 AngularJS 中的错误

javascript - jquery/Dropzone.js 获取添加图片的当前索引

angularjs - ng-map:设置缩放级别时无法读取未定义的属性 'apply'

javascript - 我可以检测浏览器的网络事件是否处于空闲状态?

javascript - 通过引用传递对象到返回的函数