Angular に子コントローラーがある場合、それは親スコープから継承されます。したがって、一部の子孫コントローラーにない関数を含む最上位コントローラーが 1 つある場合、最上位関数 (またはスコープ オブジェクト) が参照されます。子コントローラーの 1 つが関数 (またはスコープのプロパティ) のローカル バージョンを定義する場合、親コントローラーから継承されなくなります。
フィドル: http://jsfiddle.net/Y9yEQ/
HTML
<div ng-app="myApp" ng-controller="TopLevelCtrl">
<button ng-click="testing()">Yo top level!</button>
<button ng-click="testing2()">Yo top level 2!</button>
<div ng-controller="ChildCtrl">
<button ng-click="testing()">Yo child!</button>
<button ng-click="testing2()">Yo child2!</button>
</div>
</div>
JS
angular.module("myApp",[]).controller("TopLevelCtrl", function($scope){
$scope.testing = function() {
alert("just testing");
}
$scope.testing2 = function() {
alert("just testing parent");
}
}).controller("ChildCtrl", function($scope){
$scope.testing2 = function() {
alert("just testing child");
}
})
複数のコントローラー間で一部のデータを共有する必要がある場合 (ビューが追加/削除されると、ビューをサポートするためにコントローラー インスタンスが作成または破棄される可能性があるため)、サービスを使用する必要があります。コントローラーに厳密な構造がある場合は、$emit でイベントをスコープにバブリングしたり、$broadcast でスコープを介してイベントを送信したりできます。