2016-09-29 6 views
0

ターゲットページのコントローラで$ scope.emitを使用すると、$ state.goステートメントの後に見つかったので、これを尋ねています。初期ページのコントローラ$ state。$ onはメッセージを受信できません。

とにかく私はこの動作がすべてのコントローラで発生しないことに気づいたので、これは私を混乱させます。

私のプロジェクトの3つのコントローラーを例に挙げてみましょう.Ctrl1とCtrl2の両方にstate.go〜Ctrl3があります。

CTRL1:

var NewsCtrl = function($rootScope, $scope, $http, $q, $location, $state, $stateParams, $sce, $ionicHistory, $ionicViewService) { 
 

 

 
    $rootScope.$on('updateNewsLocalViewsCount', function(event, data) {  
 
    console.log('##root scope receiving updateNewsLocalViewsCount:' + event + ':' + JSON.stringify(data)); 
 

 
    }); 
 

 

 
    $scope.$on('updateNewsLocalViewsCount', function(event, data) {  
 
    console.log('#scope receiving updateNewsLocalViewsCount:' + event + ':' + JSON.stringify(data)); 
 
    }); 
 

 
    $scope.gotoNotifications = function() { 
 
    $state.go("app.notifications"); 
 
    }; 
 

 

 
};
<button 
 
class="button-icon" 
 
ng-click="gotoNotifications()">notifications 
 
</button>

CTRL2:

var LeadsCtrl = function($cordovaNetwork, $cordovaPreferences, $ionicPlatform, $localStorage, $rootScope, 
 
          $cordovaStatusbar, $state, $location, $translate, 
 
          $ionicLoading) { 
 

 
     $rootScope.$on('LeadSavedAsCustomer', function(event, data) { 
 
     console.log('#root scope receiving Leads Ctrl-LeadSavedAsCustomer-' + event + ':' + JSON.stringify(data) + ' DO NOTHING '); 
 
     }); 
 

 
     $scope.$on('LeadSavedAsCustomer', function(event, data) { 
 
     console.log('#scope receiving Leads Ctrl-LeadSavedAsCustomer-' + event + ':' + JSON.stringify(data) + ' DO NOTHING '); 
 
     }); 
 

 
     $scope.gotoNotifications = function() { 
 
     $state.go("app.notifications"); 
 
     }; 
 

 

 
    };
<button 
 
class="button-icon" 
 
ng-click="gotoNotifications()"> 
 
notifications 
 
</button>

CTRL3:

var NotificationsCtrl = function($scope) { 
 

 

 
    $scope.$emit('updateNewsLocalViewsCount', {"newsid":"1", "counts":"1"}); 
 

 

 
    $scope.$emit('LeadSavedAsCustomer', {"customerId": "1", "leadId": "1"}); 
 

 

 
}

結果:CTRL1で

:のみ$ rootScope $呼び出されたの。

(Ctrl2):$ rootScope。$ onと$ scope。$ onの両方が呼び出されました。

実際にこれらのコントローラーはかなり似ています。なぜ行動が異なるのか分かりません。

state.goまたはhtmlは自動的に親子関係を作成しますか?

答えて

0

あなたのHTMLには、の中にNotificationsCtrlがありますか?その場合、前者は後者の子となる。そしてそれは$scope.$onのトリガーになります。同じ技術が適用されますので、同じように、NG-含めるとNG-スイッチ、通常の原型継承にNG-コントローラの結果を使用して、よりおよそScope Hierarchy in AngularJS

ネスティングコントローラをお読みください。コントローラスコープの継承を介して実際にデータを共有したい場合は、何もする必要はありません。子スコープは、すべての親スコーププロパティにアクセスできます。

+0

これらのコントローラはすべて、分離されたコントローラです。つまり、ネストされた構造体を持たない独自のhtmlファイルがあります。ネストされたコントローラがネストされたコントローラから親にデータを送信できることがわかります。実際には$ state.goまたはを使用しているときに親にメッセージを送信することもできます。これについてのかなりの数の.. – zjx

関連する問題