2014-04-02 13 views
10

Jestem nowy w angularjs. Jaka jest różnica, jeśli przypisujesz funkcję do zakresu lub tych słów kluczowych w kontrolerze? Dziękuję.Różnica między tym a zakresem w kontrolerze

Przykład (zakres):

.controller('TestCtrl', ['$scope', function ($scope) { 
    $scope.testFunc = function() { 
    }; 
}]); 

Przykład (to)

.controller('TestCtrl', [function() { 
    var app = this; 
    app.testFunc = function() { 
    }; 
}]); 

Odpowiedz

10

$scope jest pojęciem rdzeń kątowe ram oraz dwa functionnalities danych wiążące. Jest na przykład przeznaczone do dzielenia się swoją zawartość z:

  • szablonów
  • dyrektyw
  • itp

W szablonie na przykład, trzeba powiązać funkcję do scope do Uzyskać dostęp do niego. Nie będzie można bezpośrednio wywołać funkcji powiązanej z numerem this.


Edit: Dzięki BKM post który wskazał, że takie zachowanie jest możliwe z „kontrolera jako” składni, który wiąże szablonu bezpośrednio do kontrolera. Ale to Ty decydujesz, czy chcesz udostępnić wszystkie obiekty/zmienne kontrolera w swoim szablonie, zamiast mieć dedykowane viewModel (scope). Do zalet i wad, zobacz: https://groups.google.com/forum/#!topic/angular/84selECbp1I


To ważny koncepcja kanciasty, które trzeba zrozumieć.

Patrz:

this keywork odnosi się tylko javascript object refering swoimi controller, nic więcej.

8

To, co Bixi powiedziała, było złe. Nie jest konieczne posiadanie funkcji powiązania z zakresem w celu uzyskania do niej dostępu.

W najnowszej wersji Angular JS, tj. 1.2 wprowadzono nowe słowo kluczowe controllerAs, aby umożliwić niezakresanie zakresu wewnątrz kontrolera.

<div ng-controller="testCtrl as test"> 
    {{test.value}} 
</div> 

A w kontrolerze

app.controller('testCtrl ', function() { 
    this.value = 'Hello World'; 
}); 

Patrz powyższy kontroler jest generowany na wstrzykiwanie $scope w nim.

Here jest dobry poradnik wideo wyjaśniający to

+0

Dzięki za poiting że obecnie, edytowane mój post. –

+0

@BKM to był samouczek, który obejrzałem i zobaczyłem tę koncepcję, więc potrzebowałem wyjaśnienia. Dziękuję za odpowiedzi chłopaki, okrzyki! ;) –