/ / AngularJS - Alternativa para $ escopo em uma fábrica - angularjs, serviço, escopo, fábrica

AngularJS - Alternativa para $ escopo em uma fábrica - angularjs, serviço, escopo, fábrica

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 № 1

O 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) {