Чтобы повысить эффективность, уменьшите число наблюдателей , используя ::
и исключив двусторонние привязки, например, ng-model
:
<div ng-repeat="i in ::somelist">
<input type="text" value="{{i.name}}"
ng-blur="$emit('nameChanged', i)"/>
</div>
Тогда в вашем контроллере:
$scope.$on('nameChanged', (event, i) => updateName(i));
Затем быстрая, простая функция, которая обновляет имя с соответствующим идентификатором, используя i.id
и i.name
, при условии, что у вас есть:
$scope.someList = [
{ id: 1, name: 'John' },
{ id: 2, name: 'Max' },
{ id: 3, name: 'Betty }'
Объяснение
Если люди не будут добавлены / удалены из списка, вы можете использовать ::
для someList
, также известный как одноразовая привязка , для повышения эффективности. Это обходит настройку watcher .
Кроме того, установив значение = {{i.name}}
, вы фактически устанавливаете одностороннюю привязку от контроллера к DOM, а не двустороннюю, что означает, что значение входа не ' Проверяется каждый цикл цикла $digest
, но любые изменения в модели будут обновлять DOM.
Просто идея, не стесняйтесь играть с вариациями, такими как отбрасывание размытия и использование одной кнопки, которая обновит все измененные поля сразу.
Вы не добьетесь гораздо большей эффективности, если только вы не удалите наблюдателя из value="{{i.name}}"
, как, например, value="{{::i.name}}"
, а затем вручную обновите DOM при получении события.