AngularJS
Il Sé o questa variabile in un controller
Ricerca…
introduzione
Questa è una spiegazione di un modello comune e generalmente considerata la migliore pratica che è possibile vedere nel codice AngularJS.
Comprensione dello scopo del sé variabile
Quando si utilizza "controller come sintassi" si darebbe al controller un alias nell'html quando si utilizza la direttiva ng-controller.
<div ng-controller="MainCtrl as main">
</div>
È quindi possibile accedere a proprietà e metodi dalla variabile principale che rappresenta l'istanza del controller. Ad esempio, accedi alla proprietà di saluto del nostro controller e visualizzalo sullo schermo:
<div ng-controller="MainCtrl as main">
{{ main.greeting }}
</div>
Ora, nel nostro controller, dobbiamo impostare un valore per la proprietà di saluto della nostra istanza controller (diversamente da $ scope o qualcos'altro):
angular
.module('ngNjOrg')
.controller('ForgotPasswordController',function ($log) {
var self = this;
self.greeting = "Hello World";
})
Per poter visualizzare correttamente l'HTML, era necessario impostare la proprietà di saluto su questo all'interno del corpo del controller. Sto creando una variabile intermedia denominata self che contiene un riferimento a questo. Perché? Considera questo codice:
angular
.module('ngNjOrg')
.controller('ForgotPasswordController',function ($log) {
var self = this;
self.greeting = "Hello World";
function itsLate () {
this.greeting = "Goodnight";
}
})
In questo codice sopra puoi aspettarti che il testo sullo schermo si aggiorni quando viene chiamato il metodo itsLate , ma di fatto non lo fa. JavaScript utilizza le regole di scoping a livello di funzione in modo che il "questo" all'interno di itsLate si riferisca a qualcosa di diverso che "questo" al di fuori del corpo del metodo. Tuttavia, possiamo ottenere il risultato desiderato se usiamo la variabile automatica :
angular
.module('ngNjOrg')
.controller('ForgotPasswordController',function ($log) {
var self = this;
self.greeting = "Hello World";
function itsLate () {
self.greeting = "Goodnight";
}
})
Questa è la bellezza dell'uso di una variabile "autonoma" nei controller: è possibile accedervi da qualsiasi parte nel controller e sempre essere sicuri che faccia riferimento all'istanza del controller.