Point 4 is the wrong approach in AngularJs: you shouldn't do that! :) The whole idea of Controllers in Angular is that of mediators between a well defined and limited piece of DOM and the business logic associated with it. In other words, you should try to create specialised controllers for each functional area of your application/page: do you have a menu ? wrap it's DOM around a MenuController.. a list of 'things' ? wrap it around its own ListXXController and so on.. Controllers can also enjoy nesting (you can nest a controller inside another one, with the inner one having access to the scope of the outer). Communication between controllers can easily be obtained with Angular Pub/Sub mechanism: publish events on the root scope ($rootScope.broadcast()) and registering event handlers within controllers interested in being notified ($scope.on())
Having specialised controllers for each 'piece' of your page promotes composition (and reuse) and easy testing in isolation; Pub/Sub communication promotes loose coupling and reduce regressions (since each controller is a 'black box' you can plug in/out of your application without affecting other areas of your code, ideally).
Comment
Point 4 is the wrong approach in AngularJs: you shouldn't do that! :)
The whole idea of Controllers in Angular is that of mediators between a well defined and limited piece of DOM and the business logic associated with it. In other words, you should try to create specialised controllers for each functional area of your application/page: do you have a menu ? wrap it's DOM around a MenuController.. a list of 'things' ? wrap it around its own ListXXController and so on..
Controllers can also enjoy nesting (you can nest a controller inside another one, with the inner one having access to the scope of the outer).
Communication between controllers can easily be obtained with Angular Pub/Sub mechanism:
publish events on the root scope ($rootScope.broadcast()) and registering event handlers within controllers interested in being notified ($scope.on())
Having specialised controllers for each 'piece' of your page promotes composition (and reuse) and easy testing in isolation; Pub/Sub communication promotes loose coupling and reduce regressions (since each controller is a 'black box' you can plug in/out of your application without affecting other areas of your code, ideally).