0

私は次の時計を持っています。

 $scope.$watch('[gridService.gridOptions.pagingOptions.currentPage, gridService.gridOptions.pagingOptions.pageSize]', function (newVal, oldVal, e) {
     if (newVal !== oldVal) {
          $scope.search();
     }
 }, true);

2 つの質問があります。

  1. pageSize が変更された場合、currentPage の値を 1 に設定したいと考えています。その場合、currentPage で監視を開始します。どうすればそれを防ぐことができますか?

  2. どちらが時計をトリガーしたかを確認するにはどうすればよいですか? pageSize が変更されたときに currentPage を 1 に設定したい場合は、pageSize が監視をトリガーしたことを知る必要があります。この場合、2 つの別々の時計が必要ですか?

4

2 に答える 2

1

これらのフィドルをチェックアウトしてください。1 つは複雑な時計 (あなたのものとは少し異なります) で、もう 1 つは別の時計です。

http://jsfiddle.net/rZxEc/ → コンプレックスウォッチ

http://jsfiddle.net/SM5aB/ →2つの時計

原則は同じです。ページの変更がページ サイズの変更によるものかどうかを記憶する変数です。囲んでいる無名関数はvar triggeredByPageSize、残りのコードによって隠されているだけです。

(function() {
    var triggeredByPageSize
    // set $watches here
})();

別々の時計(フィドル2)の方がきれいだと思います。

于 2013-09-26T07:17:19.263 に答える
0

ここで複数のプロパティを監視するには、次のような文字列配列を渡すことができることを考慮する必要があります。

$scope.$watch('[someproperty,someproperty2,someproperty3]',function(new,old){
    //do something
},true);

最後の「true」は、オブジェクトを深く監視することを指定するため、多くのサブプロパティを持つ大きなオブジェクトがあり、親オブジェクトへの変更を監視したいとします。 true を渡すと、サブ プロパティが変更されても反映されません。

あなたは、新しいの最後にインデックスを追加することでアクセスできると信じています。

$scope.$watch('[someproperty,someproperty2,someproperty3]',function(new,old){
    console.log(new[0]);
    console.log(new[1]);
},true);
于 2013-09-26T07:25:52.650 に答える