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 № 1Do 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) {