入力時にフォーカスが当たっているときにレンダリングをブロックする指示文を作成しています。入力がフォーカスされているときにモデルが更新されない
ユースケースは、バックエンドから頻繁なライブアップデートを受け取り、ng-modelバインディングのためにユーザーが入力に書き込んでいるものをすべて上書きするというケースです。 ng-keydown="($event.keyCode === 13) ? $ctrl.setItem($event, $ctrl.item) : return"
を使用してEnterキーを押して更新を送信します。ここで$ ctrl.setItemはバックエンドに要求を送信します。
私はそれが欲しいと思っていたような気がしました。編集した後に入力をぼかすと驚くべき結果しか得られません。
私は$の間隔を使用してバックエンドの更新をシミュレートplunker作っ:あなたが最初の入力フィールドで編集を行うと、新しい「更新」のために、数秒待ってぼかした場合、その後、https://plnkr.co/edit/XNFA3bQtbGliAhS0uVmP?p=preview
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);
}
};
}
};
});
を最後のモデルの更新ではなく、最後のビューの編集の状態に戻ります。私たちは常に最新のアップデートをバックエンドから見せたいので、これを修正する必要がありますが、私は困惑しています。