포커스가있는 상태에서 입력에 대한 렌더링을 차단하는 지시문을 작성 중입니다.입력에 포커스가있을 때 모델이 업데이트되지 않습니다.
유스 케이스는 우리가 백엔드에서 자주 실시간 업데이트를 수신하며, ng-model 바인딩으로 인해 사용자가 입력 한 내용을 덮어 씁니다. ng-keydown="($event.keyCode === 13) ? $ctrl.setItem($event, $ctrl.item) : return"
을 사용하여 enter 키를 눌러 업데이트를 보내면 $ ctrl.setItem이 백엔드에 요청을 보냅니다.
나는 그것을 원했던 것처럼 거의 작동했지만, 편집을 한 후에는 입력을 흐리게 할 때 놀라운 결과가 나타납니다.
app.directive('noUpdatesWhenFocused', function() {
return {
restrict: 'A',
require: '?ngModel',
link: function(scope, element, attrs, ngModel) {
if (!ngModel || element[0].type !== 'text') {
return;
}
var hasFocus = false;
element.on('focus', function() {
hasFocus = true;
});
element.on('blur', function() {
hasFocus = false;
ngModel.$render();
});
ngModel.$render = function() {
if (!hasFocus) {
element.val(ngModel.$viewValue);
}
};
}
};
});
첫 번째 입력 필드에 편집을하고 새로운 "업데이트"몇 초 정도 기다린 후 흐리게 경우 https://plnkr.co/edit/XNFA3bQtbGliAhS0uVmP?p=preview 다음 : 나는 $ 간격을 사용하여 백엔드 업데이트를 시뮬레이션 곳
은 내가 plunker했다 모델은 마지막 모델 업데이트 대신 마지막 뷰 편집 상태로 되돌아갑니다. 우리는 항상 백엔드에서 최신 업데이트를 보여주기를 원하므로이 문제를 해결해야합니다. 그러나 나는 어려움을 겪습니다.