Szukaj…


Wprowadzenie

Jest to wyjaśnienie powszechnego wzorca i ogólnie uważanej najlepszej praktyki, którą można zobaczyć w kodzie AngularJS.

Zrozumienie celu zmiennej własnej

Gdy używasz „kontrolera jako składni”, dajesz kontrolerowi alias w html, gdy używasz dyrektywy ng-kontroler.

<div ng-controller="MainCtrl as main">
</div>

Następnie możesz uzyskać dostęp do właściwości i metod z głównej zmiennej, która reprezentuje naszą instancję kontrolera. Na przykład przejdźmy do właściwości powitania naszego kontrolera i wyświetlmy ją na ekranie:

<div ng-controller="MainCtrl as main">
    {{ main.greeting }}
</div>

Teraz w naszym kontrolerze musimy ustawić wartość właściwości powitania naszej instancji kontrolera (w przeciwieństwie do $ scope lub czegoś innego):

angular
.module('ngNjOrg')
.controller('ForgotPasswordController',function ($log) {
  var self = this;

  self.greeting = "Hello World";
})

Aby poprawnie wyświetlać HTML, musieliśmy ustawić właściwość powitania w tej części naszego ciała kontrolera. Tworzę zmienną pośrednią o nazwie self, która zawiera odniesienie do tego. Dlaczego? Rozważ ten kod:

angular
.module('ngNjOrg')
.controller('ForgotPasswordController',function ($log) {
  var self = this;

  self.greeting = "Hello World";

  function itsLate () {
    this.greeting = "Goodnight";  
  }

})

W powyższym kodzie można oczekiwać, że tekst na ekranie zostanie zaktualizowany po wywołaniu metody itsLate , ale w rzeczywistości tak się nie dzieje. JavaScript korzysta z reguł określania zakresu na poziomie funkcji, więc „to” wewnątrz swojego obiektu odnosi się do czegoś innego niż „to” poza treścią metody. Możemy jednak uzyskać pożądany wynik, jeśli użyjemy zmiennej własnej :

 angular
.module('ngNjOrg')
.controller('ForgotPasswordController',function ($log) {
  var self = this;

  self.greeting = "Hello World";

  function itsLate () {
    self.greeting = "Goodnight";  
  }

})

Na tym polega piękno używania zmiennej „self” w kontrolerach - możesz uzyskać do niej dostęp w dowolnym miejscu w kontrolerze i zawsze możesz mieć pewność, że odwołuje się ona do instancji kontrolera.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow