P.....8
P.....8
#programowanie #angularjs #javascript #noobalert

Mam kod z pewną aplikacją w AngularJS, próbuję to jakoś ogarnąć, ale mam dosyć podstawowe pojęcie jak to działa.
Mam kontroler o nazwie "AdminCtrl":

angular.module('nodetestsApp')
.controller('AdminCtrl', function ($scope, $http, Auth, User) {
//jakiś kod
});

Funkcja otrzymuje jakieś dane ($scope, $http, Auth, User). Skąd się biorą te zmienne?

Przerabiałem kiedyś tutorial z Angulara, to działało to tak, że miałem controller i przekazywałem mu 2 zmienne: nazwę kontrolera i tablicę z gdzie wymieniałem metody które chcę uzywać. Wyglądało to tak:

myApp.controller('DoubleController', ['$scope', function($scope) {
}]);

Czyli jest nawias kwadratowy, string o wartości '$scope' który określa że będę używał $scope w moim kontrolerze no i funkcja która odbiera te metody.
W kodzie który analizuję nie ma nawiasu kwadratowego. Skąd więc biorą się w takim razie te funkcje? Czy jest jakieś konkretne miejsce w którym z góry zakłada się jakie dane otrzymują kontrolery?
  • Najlepsze
  • Wszystkie komentarze
S.....k
S.....k
@Pietrek558: słowo klucz: dependency injection
Jurigag
@Pietrek558: są one pobierane z kontenera, domyślnie angular odpala te wszelkie controllery w kontenerze i wtedy te $scope, $http i tak dalej odwołują się do zmiennych z kontrolera, przy np minifikacji plików to te zmienne zostaną zastąpione krótkimi nazwami i dlatego korzysta się w 99,9% przypadków z tej drugiej opcji
c.....i
c.....i
@Pietrek558: prawdopodobnie pierwsza aplikacja używa pluginu ng-annotate, który pozwala ominąć deklaracje z kwadratowymi nawiasami
lol_nope
lol_nope
@Pietrek558: Angular sam ogarnia co wstrzyknąć w zmienną na podstawie jej nazwy. Praktyka dość niepolecana, bo potem przy minimalizacji plików nie można użyć opcji skracania nazw zmiennych.
P.....8
P.....8
@lol_nope: kod jest wygenerowany tym, twórcy chwalą się że:

project following best practices

więc ja tam juz nie wiem ( ͡° ͜ʖ ͡°)
P.....8
P.....8
@Jurigag: Czym jest "kontener"?
Jurigag
@Pietrek558: miejsce w którym działa cała aplikacja, DI właśnie opiera się na kontenerze
lol_nope
lol_nope
minifikacji


@Jurigag: Właśnie tego słowa mi brakowało :p