2013-01-23 5 views
13

通常NG-モデルが更新されます。AngularJSの変更時の指示を作成するにはどうすればいいですか?</p> <pre><code><input type="text" ng-model="entity.value" /> </code></pre> <p>これは、ほとんどの場合には素晴らしい作品:たびにユーザーがキーを押したモデルをバインド

しかし、onkeyup/onkeydownイベントの代わりにonchangeイベントが発生したときに更新する必要があります。

古いバージョンでは、ng-model-instantディレクティブが現在ng-modelと同じ働きをしていました(少なくとも、ユーザーにとっては実装について何も知らない)。 古いバージョンでは、ng-modelを与えたばかりのモデルはonchangeを更新していました.ng-model-instantを指定すると、モデルonkeypupを更新していました。

今、要素の「変更」イベントで使用するにはng-modelが必要です。私はそれが瞬間であることを望んでいません。これを行う最も簡単な方法は何ですか?

EDIT

は、入力がまだモデルにその他の変更を反映するために持っている - モデルは、他の場所で更新されます場合は、入力の値は、この変更を反映する必要があります。

私が必要とするのは、古いバージョンのangularjsのようにng-modelディレクティブを動作させることです。ここで

は、私が何をしようとしているの説明です: http://jsfiddle.net/selbh/EPNRd/

答えて

20

私はあなたのためにonChange指示を作成しました。 デモhttp://jsfiddle.net/sunnycpp/TZnj2/52/

app.directive('onChange', function() {  
    return { 
     restrict: 'A', 
     scope:{'onChange':'=' }, 
     link: function(scope, elm, attrs) { 
      scope.$watch('onChange', function(nVal) { elm.val(nVal); });    
      elm.bind('blur', function() { 
       var currentValue = elm.val(); 
       if(scope.onChange !== currentValue) { 
        scope.$apply(function() { 
         scope.onChange = currentValue; 
        }); 
       } 
      }); 
     } 
    };   
}); 
+1

しかし、私はまだモデルがどこか別の場所に変更されたときに更新したいと思っています。 –

+1

それは更新されています、それを試してください。これは、2つのテキスト形式で動作しています。 – SunnyShah

+0

他の人が直接使用できるようにconsole.logsを削除しました。;) – SunnyShah

1

いずれにも(私はこれを行うには良い方法があるかどうかわからないんだけど、カスタムディレクティブを使用してこれを達成することができますあなたが望むjqueryイベント)

<input type="text" ng-model="foo" custom-event="bar" /> 
<p> {{ bar }} </p> 

// create the custom directive 

app.directive('customEvent', function() { 
    return function(scope, element, attrs) { 
     var dest = attrs.customEvent; 

     $(element[0]).on('any-jquery-event', function(e) { 
      e.preventDefault(); 

      // on the event, copy the contents of model 
      // to the destination variable 
      scope[dest] = scope.foo; 

      if (!scope.$$phase) 
       scope.$apply(); 
     }); 
    } 
}); 
+0

:また

、(単にぼかしていない)を使用するイベントを指定し、他の特性は非常にすぐの角に組み込まれるべきを可能にし、より柔軟なソリューション。 scope.apply()関数が存在しないため、エラーが発生します。 – gerl

+1

これは範囲です$ apply() –

4

も参照してください:AngularJS ngChangeディレクティブ。

<入力>に適用すると、キーが押されるたびに変更が発生し、ぼかしイベントは発生しません。

http://docs.angularjs.org/api/ng.directive:ngChange

+0

OP: "onkeyup/onkeydownイベントの代わりに、onchangeイベントが発生したときに更新する必要があります。" –

+1

'ng-change'は実際にはJavaScriptの' change'イベントにバインドされていません。実際に 'ng-model'システム内に' $ viewValue'変更リスナを設定します。同じことではありません。 –

関連する問題

 関連する問題