Поиск…


Вступление

Это объяснение общей картины и, как правило, считается лучшей практикой, которую вы можете увидеть в коде AngularJS.

Понимание цели самопеременной

При использовании «контроллера в качестве синтаксиса» вы должны дать вашему контроллеру псевдоним в html при использовании директивы ng-controller.

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

Затем вы можете получить доступ к свойствам и методам из основной переменной, представляющей наш экземпляр контроллера. Например, давайте посмотрим на свойство приветствия нашего контроллера и отобразим его на экране:

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

Теперь в нашем контроллере нам нужно установить значение свойства приветствия нашего экземпляра контроллера (в отличие от $ scope или чего-то еще):

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

  self.greeting = "Hello World";
})

Для того , чтобы правильно иметь дисплей HTML нам нужно установить свойство приветственного на этом внутри нашего тела контроллера. Я создаю промежуточную переменную с именем self, которая содержит ссылку на это. Зачем? Рассмотрим этот код:

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

  self.greeting = "Hello World";

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

})

В этом вышеприведенном коде вы можете ожидать, что текст на экране будет обновляться при вызове метода itsLate , но на самом деле это не так. JavaScript использует правила определения уровня функции, поэтому «this» внутри itsLate относится к чему-то другому, что «это» вне тела метода. Однако мы можем получить желаемый результат, если мы используем переменную self :

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

  self.greeting = "Hello World";

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

})

Это красота использования «собственной» переменной в контроллерах - вы можете получить доступ к ней в любом месте своего контроллера и всегда можете быть уверены, что она ссылается на ваш экземпляр контроллера.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow