AngularJS
Controller as

$scope could be a problem, why?

Each controller has his own $scope.title, but what if we want to retrieve a title from a parent controller?

<div class="box" ng-controller="MainCtrl">
	<div class="box-title">MainCtrl</div>
	<div class="box-title--bind">{{title}}</div>

	<div class="box" ng-controller="SecondCtrl">
		<div class="box-title">SecondCtrl</div>
		<div class="box-title--bind">{{title}}</div>
		<div class="box-title--bind">{{title}}</div>

		<div class="box" ng-controller="ThirdCtrl">
			<div class="box-title">ThirdCtrl</div>
			<div class="box-title--bind">{{title}}</div>
			<div class="box-title--bind">{{title}}</div>
			<div class="box-title--bind">{{title}}</div>
		</div> <!-- // ThirdCtrl -->
	</div> <!-- // SecondCtrl -->
</div> <!-- // MainCtrl -->
			
MainCtrl
{{title}}
SecondCtrl
{{title}}
{{title}}
ThirdCtrl
{{title}}
{{title}}
{{title}}
Dirty solution: $scope and $parent.$scope

Is $parent.$scope a solution? Yes and no at the same time. Can you image it with 4, 5 or 6 nested controllers with a lot of tags and nested tags? It is impossible to figure out which is the controller that refers to that particular $scope or $parent.$scope.


<div class="box" ng-controller="MainCtrl">
	<div class="box-title">MainCtrl</div>
	<div class="box-title--bind">{{title}}</div>

	<div class="box" ng-controller="SecondCtrl">
		<div class="box-title">SecondCtrl</div>
		<div class="box-title--bind">{{$parent.title}}</div>
		<div class="box-title--bind">{{title}}</div>

		<div class="box" ng-controller="ThirdCtrl">
			<div class="box-title">ThirdCtrl</div>
			<div class="box-title--bind">{{$parent.$parent.title}}</div>
			<div class="box-title--bind">{{$parent.title}}</div>
			<div class="box-title--bind">{{title}}</div>
		</div> <!-- // ThirdCtrl -->
	</div> <!-- // SecondCtrl -->
</div> <!-- // MainCtrl -->
			
MainCtrl
{{title}}
SecondCtrl
{{$parent.title}}
{{title}}
ThirdCtrl
{{$parent.$parent.title}}
{{$parent.title}}
{{title}}
Perfect solution: Controller as

You have to declare "Controller as ctrl" and also in your .js use "this" instead $scope to bind the view/model! Save your time without search the parent controller, write immediately what you need, it's easy and fast.


<div class="box" ng-controller="MainCtrl  as main ">
	<div class="box-title">MainCtrl</div>
	<div class="box-title--bind">{{main.title}}</div>

	<div class="box" ng-controller="SecondCtrl  as second ">
		<div class="box-title">SecondCtrl</div>
		<div class="box-title--bind">{{main.title}}</div>
		<div class="box-title--bind">{{second.title}}</div>

		<div class="box" ng-controller="ThirdCtrl  as third ">
			<div class="box-title">ThirdCtrl</div>
			<div class="box-title--bind">{{main.title}}</div>
			<div class="box-title--bind">{{second.title}}</div>
			<div class="box-title--bind">{{third.title}}</div>
		</div> <!-- // ThirdCtrl -->
	</div> <!-- // SecondCtrl -->
</div> <!-- // MainCtrl -->
				

angular
	.module('MyApp', [])

	.controller('MainCtrl', [function MainCtrl(){
	    var main = this;
	    main.title = "Main Ctrl Title"
	}])

	.controller('SecondCtrl', [function SecondCtrl(){
	    var second = this;
	    second.title = "Second Ctrl Title"
	}])

	.controller('ThirdCtrl', [function ThirdCtrl(){
	    var third = this;
	    third.title = "Third Ctrl Title"
	}]);
				
MainCtrl
{{main.title}}
SecondCtrl
{{main.title}}
{{second.title}}
ThirdCtrl
{{main.title}}
{{second.title}}
{{third.title}}

Lorenzo D'Ianni