我正在使用一些版本的jquery自动完成作为angularjs指令。当jquery使用element.val()
更新输入值时,直到下一次脏检查后(我猜)angular才会注意到更改。
我的第一个想法是在使用$timeout
执行ng-model
post digest上的操作,但是正如您所看到的,这并没有起到帮助作用。
我的第二种方法是覆盖元素的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);
这样做可以保持指令的界面,同时确保
ng-model
的更新。谢谢。
auto-complete
指令中设置ngmodel.$setViewValue(element.val())
以响应element.val()
的更改?这意味着我将不得不监视$element.val()
,但是Angular目前不允许 - 你知道有什么解决方法吗? - haki