2016-06-29 6 views
0

現在、編集後にウェブページ内のすべてのコンテンツを「保存」しようとしています。 IEでは、ユーザーが入力をクリックしてデータを入力し、どこか別の場所をクリックするとすぐに、モデルのすべてのデータを収集してブラウザのローカルストレージに保存する機能を実行します。複数の入力にAngular ngBlurを追加

それを行うための通常の方法だ
<input ng-blur="functionName()" /> 

、しかし、のiは入力のトンを持っているとしましょう:

<input ng-blur="functionName()" /> 
<input ng-blur="functionName()" /> 
<input ng-blur="functionName()" /> 
<input ng-blur="functionName()" /> 

は、私はすべてのページのinputsまたは必須にng-blue効果を適用するために何かできることがあります私はinputng-blue属性を入れますか?

+0

使用NG-モデルとオブジェクトにその値を代入して、コントローラ内のオブジェクトに時計を設定します。 –

+0

@JohnHalbert実際には、ほとんどの入力は ''です。だからコントローラからこのモデルの変更を見ることができますか? – Kenny

答えて

0

これを行うカスタムディレクティブを作成できます。これは、この質問の答えから適応したものです:

AngularJS 1.3 - `ng-change`-like functionality for the entire form

はこれをテストしていませんが、それは正しい軌道に乗ってあなたを取得する必要があります。

.directive('inputsOnBlur', ['$parse', function($parse){ 
    return { 
    link: function(scope, element, attrs){ 
     var cb = $parse(attrs.inputsOnBlur); 
     element.find('input').on('blur', function(){ 
      cb(scope); 
     }); 
    } 
    } 
}]); 

とそれを使用する:もちろん

<form inputs-on-blur="doSomething()"> 
    <input /> 
    <input /> 
    <input /> 
</form> 
+0

フィードバックをいただきありがとうございます!これはすべての入力のコンテナである通常の 'div'に' inputs-on-blur'を置くことによっても動作しますか?フォームを使用していないので、入力タグだけです。 – Kenny

+0

うん、それはどの要素タイプでも動作するはずです。 – DerekMT12

+0

すごく、すぐに試してみるよ。ありがとうございました! – Kenny

0

をそれが可能です。 入力タグにdata-ng-blurを動的に追加する必要があります。 あなたのコントローラ内のコードは次のようになります。それぞれの

var inputList = Array.prototype.slice.call(document.getElementsByTagName('input')); inputList.forEach(function (input) { input.setAttribute('data-ng-blur', 'functionName()'); $compile(angular.element(input))($scope); });

+0

これは、基本的には、プログラム的に 'ng-blur'をすべて私の' input'に入れていますよね? – Kenny

+0

はい、あなたのページのすべての入力に 'data-ng-blur 'を適用します。 'ng-blur 'に添付する入力の種類を指定したい場合は、代わりに' document.querySelectorAll(' input [type = "text" ') 'を使うことができます。 –

関連する問題