コード:
<input type="text" ng-modal="name" />
{{name}}
に何か入力すると、すぐinput
に次のように変化します。すべての文字を入力して入力を終了{{name}}
した後にのみ更新するように設定できますか?name
これは、将来の回答として役立つ、AngularJS への最近の追加に関するものです。
Angular の新しいバージョン (現在は 1.3 ベータ版) では、AngularJS はこのオプションをネイティブにサポートしていますngModelOptions
。
ng-model-options="{ updateOn: 'default blur', debounce: { default: 500, blur: 0 } }"
例:
<input type="text" name="username"
ng-model="user.name"
ng-model-options="{updateOn: 'default blur', debounce: {default: 500, blur: 0} }" />
アップデート
ng-model-options
多くの人が言及しているように、Angular にはディレクティブを使用した組み込みサポートがあります。詳しくはこちらをご覧ください。
<input type="text" ng-model="name" ng-model-options="{updateOn: 'blur'}" />
以下の古い回答:
その動作を変更する ng-model の組み込みオプションはありませんが、それを行うカスタム ディレクティブを作成できます。@Gloopy は、別の質問に対してそのようなディレクティブを作成しました。ここでフィドルを見ることができます。
ディレクティブは、キーストロークごとに更新をトリガーするinput
およびイベントから登録解除します。keydown
<input type="text" ng-model="name" ng-model-onblur />
アップデート:
github でマスター バージョンを直接参照する代わりに、最新の安定した AngularJS (執筆時点で 1.2.16) を使用するようにフィドルを更新しました。
ng-model
イベントリスナーが正しく変更されるように、ディレクティブが後に実行されるように、明示的な優先順位も追加されました。
より良いオプションは、ng-model-options を使用することです。
<input type="text" ng-model="name" ng-model-options="{updateOn: 'blur'}" />
作業指示コード (ng-1.2RC3): 次を使用:
ng-model-onblur
.directive('ngModelOnblur', function () {
return {
restrict: 'A',
require: 'ngModel',
priority: 1,
link: function (scope, element, attrs, ngModelCtrl) {
if (attrs.type === 'radio' || attrs.type === 'checkbox') { return; }
var update = function () {
scope.$apply(function () {
ngModelCtrl.$setViewValue(element.val().trim());
ngModelCtrl.$render();
});
};
element.off('input').off('keydown').off('change').on('focus', function () {
scope.$apply(function () {
ngModelCtrl.$setPristine();
});
}).on('blur', update).on('keydown', function (e) {
if (e.keyCode === 13) {
update();
}
});
}
};
})