jsFiddle 演示问题:http://jsfiddle.net/yoxigen/xxTJc/
我正在构建一个小表单来编辑一个对象的所有属性。为此,我有一个用于属性的中继器。每个属性都有其输入:
<ul ng-controller="myController">
<li ng-repeat="(property, value) in obj">
<input ng-model="obj[property]"/><span>{{value}}</span>
</li>
</ul>
每次在输入中按下一个键时,它旁边的值都会正确更新,但输入会失去焦点。知道如何解决这个问题吗?
最佳答案
I wish there was a way to postpone the regeneration until I'm done editing.
你也许可以做到这一点。只需制作一个自定义指令即可消除 AngularJS 事件并改为收听“更改”。以下是该自定义指令的示例:
YourModule.directive('updateModelOnBlur', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, elm, attr, ngModelCtrl)
{
if(attr.type === 'radio' || attr.type === 'checkbox')
{
return;
}
// Update model on blur only
elm.unbind('input').unbind('keydown').unbind('change');
var updateModel = function()
{
scope.$apply(function()
{
ngModelCtrl.$setViewValue(elm.val());
});
};
elm.bind('blur', updateModel);
// Not a textarea
if(elm[0].nodeName.toLowerCase() !== 'textarea')
{
// Update model on ENTER
elm.bind('keydown', function(e)
{
e.which == 13 && updateModel();
});
}
}
};
});
然后根据您的输入:
<input type="text" ng-model="foo" update-model-on-blur />
关于javascript - AngularJS:在每次按键时使用动态 ng-model 模糊更新输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14340555/