Я использую Angular с ui.router и настроил вложенное представление. Родительский вид имеет div, видимость которого я могу переключить через функцию родительского контроллера. Я бы хотел вызвать эту функцию из дочернего контроллера вложенного представления. Как мне это сделать?
Angular ui.router, вызов функции родительского контроллера из дочернего контроллера?
Ответ 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>
Объем на контроллерах прототипно унаследован. Я считаю, что это означает, что если вы не переопределяете функцию в области, вы получаете одну и ту же функцию из родительской области, если вы ее вызываете (проблема заключается в том, что это делает предположение о контексте использования этого контроллера, хотя он спорный, если это действительно проблема, предполагая, что вы не зависите от какого-либо эффекта от этого контроллера в этом контроллере).