0

jquery.nicescroll プラグインと ng-model が添付されたtextareaタグがあります。

<textarea id="paper" ng-model="paper"></textarea>

私のコードでは$watch、この ng-model 変数に a を適用します。

$scope.$watch("paper", onTextChange);

何かを入力したときだけでなく、テキストエリアから離れてクリックしたとき、および別のタブに切り替えたときにonTextChangeが発生することを除いて、すべてが良好です。

テキストが変更されたとき、つまり何かを入力したり文字を削除したときにのみonTextChangeが発生するようにするにはどうすればよいですか?

説明付きのデモ: plunker

4

2 に答える 2

2

ここに修正があります:

http://plnkr.co/edit/kycmUrthYU38Ukdz0jJG?p=preview

setTimeout( 
function() {
    $scope.$watch("paper", function(newtext, oldtext) {
      if (newtext !== oldtext) {
        onTextChange();
      }
    });
  }, 100)

したがって、問題は、angularjs がアプリにダイジェストするように指示するたびに、watch が関数を起動することです。あなたがしたことは、変更が発生したことを確認するためにチェッカー関数を渡す必要があるときに、毎回「変更」関数を呼び出すように指示することでした。「変更を監視する」ことではなく、「監視する」ことです。関数の引数は、何かをする必要があるかどうかを確認することになっています。

追記:

AngularJS は、さまざまな要素のあらゆる種類のウォッチャーを設定します。ここにもう少し情報があります。ぼかしはダイジェストをトリガーする ng-touched に対応すると思います Angular のデフォルトで $scope.$$watchers に追加されるもの $digests のトリガーは何ですか?

于 2015-01-19T10:43:37.600 に答える