I had the same problem. here was my fix
My source code that did not update the object
<div class="info" ng-repeat="email in vm.contactData.emails.other"> <input type="text" ng-model="email" /> </div>
Uses the $ index element for proper binding
<div class="info" ng-repeat="email in vm.contactData.emails.other"> <input type="text" ng-model="vm.contactData.emails.other[$index]" /> </div>
This binding creates a repeat draw problem because it does not know if the updated element in the array refers to the same element that was in this place before. To fix this, I had to make a small change to the formatting of the array.
[' email1@google.com ',' email2@google.com ']
becomes
[ {'email': ' email1@google.com '}, {'email': ' email2@google.com '} ]
and
<div class="info" ng-repeat="email in vm.contactData.emails.other"> <input type="text" ng-model="vm.contactData.emails.other[$index]" /> </div>
becomes
<div class="info" ng-repeat="email in vm.contactData.emails.other"> <input type="text" ng-model="vm.contactData.emails.other[$index].email" /> </div>
after these changes, you should have the correct binding without any problems with re-drawing when the input field loses focus.
source share