Difference between this and scope in the controller
What Bixi said was wrong. It isn't necessary to have a function bind to the scope inorder to access it.
In the newest version of Angular JS
i.e, 1.2
they have introduces a new keyword controllerAs
to make it possible not to have scope inside a controller.
<div ng-controller="testCtrl as test">
{{test.value}}
</div>
And in your controller
app.controller('testCtrl ', function () {
this.value = 'Hello World';
});
See the above controller is generated with out injecting $scope
in it.
Here is a good video tutorial explaining this
$scope
is a core concept of angular framework and dual data-binding functionnalities. Its for example, designed to share its content with :
- templates
- directives
- etc
In a template for example, you'll need to bind a function to the scope
to access it. You'll not be able to call a function binded on this
directly.
Edit: Thank to BKM post that pointed out that this behavior is possible with the "controller as" syntax which binds your template directly to the controller. But it's up to you to decide if you want to let access all objects/variables of your controller in your template instead of having a dedicated viewModel
(scope
). For pros and cons, see : https://groups.google.com/forum/#!topic/angular/84selECbp1I
It's an important concept of angular that you need to understand.
See :
- http://docs.angularjs.org/guide/scope for an introduction
- https://github.com/angular/angular.js/wiki/Understanding-Scopes for more technical information about scopes
this
keywork refers only the the javascript object
refering to your controller
, nothing more.