32

knockoutJS では、監視可能なビューモデル プロパティの変更をサブスクライブできます。たとえば、次のようになります。

myViewModel.personName.subscribe(function(newValue) {
    alert("The person's new name is " + newValue);
});

私は現在 AngularJS を学んでいますが、AngularJS にこれと同等のものがあるかどうか疑問に思っていましたか? 私はこれを検索しようとしましたが、運がありません。

4

3 に答える 3

49

AngularJSのスコープ$watchオブジェクトには、スコープ プロパティを「監視」するために呼び出される特別なメソッドがあります。

モデルの新しい値と古い値を受け取るコールバックを受け入れます。

$scope.$watch('modelName', function(newValue, oldValue){
    // Do anything you like here
});

コールバックは初期化時およびモデルが変更されるたびに行われます。したがって、次のように等値チェックを追加するとよいでしょう。

$scope.$watch('modelName', function(newValue, oldValue){

    // Check if value has changes
    if(newValue === oldValue){
        return;
    }

    // Do anything you like here
});

これにより、モデルを「監視」し、必要に応じて何らかのアクションを実行できます。

追加の注意: オブジェクトを含むモデルを監視している場合は、参照ではなくオブジェクトの等価性によって両方の値を比較するように AngularJS に指示する追加の 3 番目のパラメーターを使用する必要があります (参照は変更されないため、ウォッチャーはトリガーされません)。 ) このような:

$scope.$watch('modelName', function(newValue, oldValue){
    // Do anything you like here
}, true); // Add extra 'true' parameter to check for object equality

AngularJS スコープページで詳細なドキュメントを読むことができます。

それが役立つことを願っています!

于 2013-06-19T19:59:48.153 に答える
7

ユーザー アクションまたはアプリケーション イベントによってトリガーされる API 呼び出しと非同期データの場合は、

$rootScope.$broadcast('updateSearch', value);

サービス関数のコールバックで直接、次のようにコントローラーで活用します。

$scope.$on('updateSearch', function(event,value) {
  $scope.search = value;
});
于 2013-06-19T20:43:50.867 に答える