Angular ui.router, вызов функции родительского контроллера из дочернего контроллера?

Я использую Angular с ui.router и настроил вложенное представление. Родительский вид имеет div, видимость которого я могу переключить через функцию родительского контроллера. Я бы хотел вызвать эту функцию из дочернего контроллера вложенного представления. Как мне это сделать?

Ответ 1

http://plnkr.co/edit/zw5WJVhr7OKqACoJhDZw?p=preview

JS

// Code goes here

angular.module("myApp", []).controller("parent", function($scope){
  $scope.parentFunction = function(){
    alert("Called a function on the parent")
  }  
}).controller("child", function($scope){
  $scope.childFunction = function(){
    alert("Called a function on the child")
  }

  $scope.parentFromChild = function(){
    alert("I know this feels weird");
    $scope.parentFunction();
  }
})

HTML

<!DOCTYPE html>
<html>

  <head>
    <script data-require="[email protected]*" data-semver="1.2.14" src="http://code.angularjs.org/1.2.14/angular.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

  <body ng-app="myApp">
    <div ng-controller="parent">
      <div ng-controller="child">
        <a href="#" ng-click="parentFunction()">Call Parent</a>
        <a href="#" ng-click="childFunction()">Call Child</a>
        <a href="#" ng-click="parentFromChild()">Call Parent from Child</a>
      </div>
    </div>
  </body>

</html>

Объем на контроллерах прототипно унаследован. Я считаю, что это означает, что если вы не переопределяете функцию в области, вы получаете одну и ту же функцию из родительской области, если вы ее вызываете (проблема заключается в том, что это делает предположение о контексте использования этого контроллера, хотя он спорный, если это действительно проблема, предполагая, что вы не зависите от какого-либо эффекта от этого контроллера в этом контроллере).