Eu entendo que não podemos passar $ escopo em uma fábrica em AngularJS como a dada abaixo.
angular.module("MYAPP", [])
.factory("SLNservice", function($scope) { ...
Estou certo?
Se for esse o caso, no exemplo abaixo -
angular.module("MYAPP", [])
.factory("SLNservice", function() {
return {
edit: function a(x) {
x.num = x.num + 1;
return x.num;
}
}
});
// código do controlador
angular.module("MYAPP", [])
.controller("t", function($scope, SLNservice) {
$scope.num = 3;
SLNservice.edit($scope.num);
console.log($scope.num);
});
Seria o console.log acima de retorno 4? ou em outras palavras, como o $ escopo não pode ser acessado em uma fábrica, podemos passar o escopo (variável / funções) como acima e fazer o trabalho? Ou devemos embrulhar o $ scope em outro objeto e passá-lo?
Ou existe uma alternativa melhor? Sugestões bem-vindos!
Respostas:
2 para resposta № 1O escopo $ não pode ser acessado em uma fábrica. podemos passar as variáveis / funções do escopo para a fábrica.
Fábrica é como, serviço que, você pode passar objeto / variável / função e você pode obter objeto / variável.
Saudações, Devang
0 para resposta № 2
Você está confundindo as coisas. Lembrar AngularJS
é claro javascript
. Todas as regras do javascript também são válidas no Angular.
Se você tem uma referência a um $scope
objeto você pode passá-lo em qualquer lugar. $ scope é apenas um objeto javascript normal.
O que não é permitido é injetar $ scope em um fator de serviço.
No exemplo acima, você pode muito bem passar o objeto de escopo para a função chamando edit($scope)
no controlador. Nada impede você de fazer isso. O risco envolvido neste caso é que você pode manter o objeto $ scope em sua fábrica em um nível global e os serviços singe singleton, o escopo pode nunca ser liberado, levando a vazamentos de memória. Portanto, você deve evitar passar $scope
para a função de serviço. Em vez disso, passe sub propriedades para a função, como edit($scope.user)
.
Também como destacado anteriormente você não pode injetar $scope
. Isso não é permitido e não faz sentido.
.factory("SLNservice", function($scope) {