2017-11-16 6 views
0

$ watchとネストされたコントローラのスコープに関する質問があります。

私は入力モデルをバインドしました。たとえば、自分のhtmlで

<input ng-model='searchString' /> 

これは子供(ネストされた)コントローラ内にありますが、親コントローラにng-modelを定義しました。だから私は親のコントローラーで$ watchしようとしました。それは動作しません。

app.controller('mainCtrl', ['$scope', function($scope){ 
     $scope.searchString = ''; 
     $scope.$watch('searchString', function(){ 
      console.log("changed in parent"); 
     }) 
    }]); 
    app.controller("nestedCtrl", ["$scope", function($scope){   
    }]) 

私は子供のコントローラで$ウォッチを置く場合は、それが働くだろう。

app.controller("nestedCtrl", ["$scope", function($scope){ 
     $scope.$watch('searchString', function(){ 
      console.log("changed in child"); 
     }) 
    }]) 

なぜ私は親コントローラでスコープを定義しましたが、子コントローラでしか見ることができませんか? 親コントローラが変更を検出する方法はありますか?私は子供のコントローラから何かをする必要があるので、このスコープ変数に基づいて、しかし私はできませんでした。

答えて

0

最速と汚いが、以下のようになります。

あなたが親$scopeにメソッドを追加してから$scope.$parent.method()を通じて子ウォッチャーからそれを呼び出すことができます。

しかし、それは良いアプローチではありません。あなたはそれを避けるべきです。通常、このような問題を解決するには、サービスを作成し、それを子と親の両方のコントローラーに挿入して通信する必要があります。

関連する問題