2

最近、AngularJS フレームワークを 1.2.0-rc.2 から 1.2.0 リリースにアップグレードしましたが、回避策がわからない奇妙な問題に遭遇しました。以前に解決した問題は、入力フィールドが on-change イベントではなく on-blur イベントで発生するように強制することでした。私が最初に使用したディレクティブのコードは次のとおりです。

angular.module('app', []).directive('ngModelOnblur', function() {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function(scope, elm, attr, ngModelCtrl) {
            if (attr.type === 'radio' || attr.type === 'checkbox') return;

            elm.unbind('input').unbind('keydown').unbind('change');
            elm.bind('blur', function() {
                scope.$apply(function() {
                    ngModelCtrl.$setViewValue(elm.val());
                });         
            });
        }
    };
});

ここにある提案を使用しているだけですhttps://groups.google.com/forum/?fromgroups#!searchin/angular/change$20blur/angular/LH0Q1A-qTVo/eyVIjJsFZGcJ

2 つの jsFiddle を作成しました。1 つは AngularJS 1.2.0-rc.2 hereを使用し、もう 1 つは AngularJS 1.2.0 hereを使用します。

ngModleOnBlurディレクティブは要素からバインディングを削除し、'change'明示的なバインディング<input>を追加する必要があり'blur'ます。

elm.bind('blur', function(){...})のバインディングが実際には要素に適切にバインドされていないなど、フィドルの動作が異なることに気付くでしょうelm.unbind('input').unbind('keydown').unbind('change')。また、1.2.0 では同じようには機能しないようです。

私は新しいng-blurディレクティブを認識していますが、私の場合、それを直接使用することはできず、要素にバインドされたイベントを手動でオーバーライドする必要があります。誰かが、要素にバインドされたイベントを手動でオーバーライドする方法の動作する jsfiddle を投稿したり、これが 1.2.0-rc.2 から 1.2.0 に変更された理由を説明したりできれば、非常に役に立ちます。

4

2 に答える 2