Utilizzando $scope
è facile emettere un evento o guardarne uno.
(function() {
"use strict";
angular
.module("app")
.controller("Ctrl", [
"$scope",
CtrlDefinition
]);
function CtrlDefinition($scope) {
$scope.$on("change", listenForChange);
function listenForChange(data) {
//do something
}
}
})();
Ma se provo ad usare la sintassi var vm = this
, che sto avvertito che $on
, $emit
, e $broadcast
non sono metodi di this
. Come posso accedervi? Devo ancora iniettare $scope
nella definizione del controller?
(function() {
"use strict";
angular
.module("app")
.controller("Ctrl", CtrlDefinition);
function CtrlDefinition() {
var vm = this;
vm.$on("change", listenForChange); //$on is not a method of vm
}
})();
Si potrebbe fare qualcosa di simile, ma non sarebbe sconfiggere lo scopo di non dover utilizzare $scope
a tutti?
(function() {
"use strict";
angular
.module("app")
.controller("Ctrl", [
"$scope",
CtrlDefinition
]);
function CtrlDefinition($scope) {
var vm = this;
vm.scope = $scope;
vm.scope.$on("change", listenForChange);
}
})();
Come si può accedere agli osservatori con il controller come sintassi?
Vedo ... Non sono molto fluente nella differenza tra '$ scope' e' this', anche se il tuo commento mi tenta solo di usare 'var vm = $ scope'. –
'this' è una parola chiave riservata in javascript che fa riferimento all'ambito immediato (in questo caso, la funzione' CtrlDefinition'. Sebbene si possa fare ciò, si potrebbero anche esporre i dati che non sono rilevanti per il controller, motivo per cui la migliore pratica detta 'var vm = this;'. –
@DanielLizik Non userei assolutamente '' '' vm = $ scope''' per collegare semplicemente tutto dal controller a $ scope, che vanifica completamente lo scopo dell'utilizzo vm o $ ctrl. – shwnrgr