'this' vs $ scope em controladores AngularJS
NoSeção "Criar Componentes" da página inicial do AngularJS, existe este exemplo:
controller: function($scope, $element) {
var panes = $scope.panes = [];
$scope.select = function(pane) {
angular.forEach(panes, function(pane) {
pane.selected = false;
});
pane.selected = true;
}
this.addPane = function(pane) {
if (panes.length == 0) $scope.select(pane);
panes.push(pane);
}
}
Observe como oselect
método é adicionado a$scope
, mas oaddPane
método é adicionado athis
. Se eu mudar para$scope.addPane
, o código quebra.
A documentação diz que há de fato uma diferença, mas não menciona qual é a diferença:
Versões anteriores do Angular (pré 1.0 RC) permitiram que você usassethis
de forma intercambiável com o$scope
método, mas isso não é mais o caso. Dentro dos métodos definidos no escopothis
e$scope
são intercambiáveis (conjuntos angularesthis
para$scope
), mas não de outra forma dentro do seu construtor do controlador.
Como é quethis
e$scope
trabalhar em controladores AngularJS?