I am learning angularJS and while learning found the controller as syntax much easier to read and a little easier for me coming from the OO world to understand. I have read several articles and SO answers that all seem to point to $scope and the 'controller as ' syntax being the same and that the 'controller as' syntax is just syntactical sugar.
However, I posted another question on SO here and the user that answered the question says that I have to still inject $scope to use the 'ui select' directives even though I am using the controller as syntax. Which is it? And if I don't have to use the $scope, what am I missing to get the 'controller as' syntax to work with ui-select?
The
controllerAs
syntax exposes your controller to the template, so rather than binding a bunch of properties to$scope
in your controller, you can make them properties of an instance of your controller. (Controllers are JavaScript "class" constructors.)So if you have the following:
...you can access it in your template like this:
Now, if you want to access scope variables in your controller -- or call a scope method such as $on -- you still need to inject
$scope
into your controller. Note the$
before scope, which indicates it is a service. This$scope
service simply exposes the current scope.All of that said, if you find yourself injecting
$scope
into your controller, you should question your approach. Better to create a custom directive and access scope via the link function, or access scope from the template.Recommended reading: http://www.johnpapa.net/do-you-like-your-angular-controllers-with-or-without-sugar/