2016-09-15 5 views
1

私はAngularJsを初めて使用していますが、私は角度1.4を使用しています。 問題がある: 私はこのように定義されたシンプルなカウンタオブジェクトを使用しています:

var myCounter = (function(){ 
        var count =0; 
        return { 
         "inc": function(){ 
          count++; 
         }, 
         "dec": function(){ 
          if(count>0){ 
           count--; 
          } 
         }, 
         "getCount": function(){ 
          return count; 
         } 
        }; 
       })(); 

私はプライベート変数カウントを保持し、唯一の「同様にgetCount」関数によって値を読みたいです。

カウントが増減するたびに、更新された 'count'の値に基づいて一連の操作を実行する必要があります。このために、私は変更を観察するために '$ watch'を使用したいと思います。しかし、私は関数 'getCount()'を呼び出すことによってのみ値を取得できます。

このシナリオでは、どのように '$ watch'を書きますかをお勧めします。これが正しい方法でない場合は、より良い方法を提案してください。

ありがとうございます!

+0

あなたは '$スコープを行うことができます。$見る(myCounter.getCount、関数(){})' – Satpal

+0

[OK]を私は一種のあなたがそこに何をしているかを理解しています。しかし、なぜそれを匿名オブジェクトとして実行するのではなく、オブジェクトとして扱わないのですか?考慮すべきもう一つのことは、あなたがしたいことです。あなたはまた、あなたが持っているさまざまな関数にコールバックをつけて、関数全体を見るのではなく、dec、incまたはgetCountの特定のコードを呼び出すこともできます。 –

+0

https://jsfiddle.net/satpalsingh/z5k95mwr/ – Satpal

答えて

2

$watchのフォーマットは$watch(watchExpression, listenerFunction)です。この場合、watchExpressionは評価する関数にすることができます。したがって、$watchにはgetCount関数(関数の結果ではありません)を渡すことができます。

ので、

$scope.$watch(myCounter.getCount, function() {}) 

myCounterがで定義されているコントローラ$watchにアクセス可能であることを仮定し、動作します。

0
$scope.$watch(myCounter.getCount, function(){ 
    //Do stuff 
}) 
0

をあなたはcountが増加するたびにcallbackは/減少を実行する必要があります。

var myCounter = (function(callback){ 
        var count =0; 
        return { 
         "inc": function(){ 
          callback(++count); 
         }, 
         "dec": function(){ 
          if(count>0){ 
           count--; 
          } 
          callback(count); 
         }, 
         "getCount": function(){ 
          return count; 
         } 
        }; 
       })(); 

またはあなたがincまたはdecイベントにcallbackを渡すことができます:あなたはこのように、コンストラクタにcallbackを渡すことができ

var myCounter = (function(){ 
        var count =0; 
        return { 
         "inc": function(callback){ 
          callback(++count); 
         }, 
         "dec": function(){ 
          if(count>0){ 
           count--; 
          } 
          callback(count); 
         }, 
         "getCount": function(){ 
          return count; 
         } 
        }; 
       })(); 

2つのアプローチの違いは、最初のもので、あなた任意の増減イベントで同じことを行い、2番目のイベントでは、そのようなイベントが発生するたびにcallbackの動作を定義します。

+0

コールバックのアプローチも素晴らしいです。ありがとうございました。! – user3427320

+0

@ user3427320よろしくお願いいたします。 –

0

ニースarticle $ watch以上!これが正しい方法を導くことを願っています。 angleはスコープ変数を監視するだけなので、スコープ内のオブジェクトを宣言する必要があります。コードは以下のようになります。

$scope.myCounter = (function(){ 
       var count =0; 
       return { 
        "inc": function(){ 
         count++; 
        }, 
        "dec": function(){ 
         if(count>0){ 
          count--; 
         } 
        }, 
        "getCount": function(){ 
         return count; 
        } 
       }; 
      })(); 

$scope.$watch('myCounter.getCount', function(newValue, oldValue) { 
    if(newValue != oldValue && newValue !=null){ 
     //call your function.. 
     } 
})