2016-05-04 2 views
1

Так что я рассматриваю пример в кодах, которые остаются острыми с угловыми в разделе 1.5. Heres код:Почему мы устанавливаем переменные контроллера равными «этим» в угловом?

angular.module('NoteWrangler') 
.controller('NotesIndexController', function($http) { 
    var controller = this; 
    $http({method: 'GET', url: '/notes'}).success(function(data){ 
     controller.notes = data; 
    }) 
}); 

Я прочитал сетей Руководство разработчика Mozilla, на [это] [1], но мое понимание еще не велика.

В следующей строке из приведенного выше примера.

var controller = this; 

Почему мы устанавливаем контроллер = на это? Почему не просто контроллер var? или путем установки его равным этому, что делает его глобальной переменной в противном случае в обратном вызове успеха, который просто изменит свою собственную переменную локального контроллера, а не та, которая объявлена ​​в контроллере?

Они позже сделать следующее в HTML, если он предоставляет какие-либо подсказки:

<div class="note-wrapper"> 
    <a class ="card-notes" ng-repeat="notes in indexController.notes"> 
    </a> 
</div> 

ответ

2

Почему не просто контроллер var ;?

Потому что это означает, что controller будет undefined.

var controller; 
 
document.querySelector('pre').innerHTML = controller;
<pre></pre>

это, установив его равным это делает его глобальную переменную

Вы не создаете переменную глобальной но вы создаете переменную closed over , Это означает, что вы можете использовать это значение в своем обратном вызове. Чтобы использовать это значение в обратном вызове, вам необходимо создать переменную закрытия или связать функцию.

var controller = { 
 
    hello: 'world' 
 
}; 
 

 
// Just so we have to use a callback 
 
setTimeout(function() { 
 
    console.log(this); 
 
}, 0); 
 

 
// Using a closure variable 
 
setTimeout(function() { 
 
    console.log(controller); 
 
}, 0); 
 

 
// Binding a function 
 
setTimeout(function() { 
 
    console.log(this); 
 
}.bind(controller), 0);

2

Установка переменных this позволяет добавлять новые пространства имен при использовании синтаксиса controllerAs.

function OneCtrl() { 
    this.notes = "foo"; 
} 

function TwoCtrl() { 
    this.notes = "bar"; 
} 

HTML:

<div ng-controller="OneCtrl as ctrl1"> 
    {{ctrl1.notes}} 
    <div ng-controller="TwoCtrl as ctrl2"> 
     {{ctrl2.notes}} 
    </div> 
</div> 

Без controllerAs, вы должны использовать в $parent, что на самом деле плохая практика. При визуализации необходимо использовать $parent.$parent.$parent.$parent.someValue.

Дальнейшее чтение: http://www.infragistics.com/community/blogs/dhananjay_kumar/archive/2015/07/02/exploring-angular-s-controller-as-syntax-and-the-vm-variable.aspx

1

является полагая его равным этому делает его глобальной переменной в противном случае в успех обратного вызова, которая будет просто меняет свою собственную локальную переменную контроллера не один заявленный в контроллере?

Значение this зависит от того, как вызывается функция.

Когда у вас есть новая функция, у вас есть новое значение для this внутри него.

Хранение его в другой переменной означает, что внутренняя функция может считывать значение этой переменной (так как она не имеет доступа к тому же this).

Это не глобальная, а просто переменная в более широком диапазоне.