/ / AngularJS - Alternatywa dla $ scope w fabryce - angularjs, serwis, zakres, fabryka

AngularJS - alternatywa dla $ scope w fabryce - angularjs, serwis, zakres, fabryka

Rozumiem, że nie możemy przekazać $ scope w fabryce w AngularJS, takiej jak podana poniżej.

angular.module("MYAPP", [])
.factory("SLNservice", function($scope) { ...

Czy mam rację?

Jeśli tak jest, w poniższym przykładzie -

angular.module("MYAPP", [])
.factory("SLNservice", function() {
return {
edit: function a(x) {
x.num = x.num + 1;
return x.num;
}
}
});

// kod kontrolera

 angular.module("MYAPP", [])
.controller("t", function($scope, SLNservice) {
$scope.num = 3;
SLNservice.edit($scope.num);
console.log($scope.num);
});

Czy konsola.log powyżej powrót 4? lub innymi słowy, skoro $ scope nie jest dostępny w fabryce, czy możemy przekazać zakres (zmienne / funkcje) jak wyżej i wykonać zadanie? Czy też powinniśmy zawinąć obiekt $ scope w innym obiekcie i przekazać go?

Czy istnieje lepsza alternatywa? Sugestie są mile widziane!

Odpowiedzi:

2 dla odpowiedzi № 1

Do zakresu $ nie można uzyskać dostępu w fabryce. możemy przekazać zakres zmiennych / funkcji do fabryki.

Fabryka jest jak, usługa, którą można przekazać obiekt / zmienną / funkcję i można uzyskać obiekt / zmienną.

Pozdrowienia, Devang


0 dla odpowiedzi nr 2

Jesteś zagmatwany. Zapamiętaj AngularJS jest prosty javascript. Wszystkie zasady javascript też dobrze się trzymają w Angular.

Jeśli masz odniesienie do a $scope obiekt można przekazać w dowolnym miejscu. $ scope jest po prostu normalnym obiektem javascript.

Niedozwolone jest wstrzykiwanie $ scope do usługi factoryservice.

W powyższym przykładzie możesz bardzo dobrze przekazać obiekt zasięgu do funkcji przez wywołanie edit($scope) w kontrolerze. Nic nie powstrzymuje cię od zrobienia tego. W tym przypadku ryzyko polega na tym, że możesz trzymać obiekt $ scope w swojej fabryce na poziomie globalnym, a usługi singe są pojedyncze, zakres może nigdy nie zostać zwolniony, co prowadzi do wycieków pamięci. Dlatego powinieneś unikać przechodzenia $scope do funkcji serwisowej. Zamiast tego prześlij właściwości podrzędne do funkcji, takie jak edit($scope.user).

Również jak podkreślono wcześniej, nie można wstrzykiwać $scope. To nie jest dozwolone i nie ma sensu.

.factory("SLNservice", function($scope) {