AngularJS:在每次按键时使用动态ng模型更新输入模糊

yox*_*gen 10 javascript forms angularjs

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>
Run Code Online (Sandbox Code Playgroud)

每次在输入中按下某个键时,它旁边的值都会正确更新,但输入会失去焦点.知道如何解决这个问题吗?

Eze*_*tor 8

我希望有一种方法可以推迟再生,直到我完成编辑.

你或许可以做到这一点.只需制作一个自定义指令,它会摧毁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();
        });
      }
    }
  };
});
Run Code Online (Sandbox Code Playgroud)

然后在你的输入:

<input type="text" ng-model="foo" update-model-on-blur />
Run Code Online (Sandbox Code Playgroud)


Uli*_*ses 5

来自谷歌论坛:

问题是,随着模型对象的每次更改,ng-repeat重新生成整个数组,从而模糊输入框.你需要做的是将你的字符串包装在对象中