AngularJS - 工厂中$ scope的替代方案

时间:2015-04-04 07:54:33

标签: angularjs service scope factory

据我所知,我们无法在AngularJS的工厂中传递$ scope,如下所示。

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

我是对的吗?

如果是这种情况,请参见下面的示例 -

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

//控制器代码

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

上面的console.log会返回4吗?或换句话说,由于$ scope无法在工厂中访问,我们是否可以通过上述范围(变量/函数)并完成工作?或者我们应该将$ scope一起包装在另一个对象中并传递它吗?

或者有更好的选择吗?建议欢迎!

2 个答案:

答案 0 :(得分:2)

$ scope无法在工厂中访问。 我们可以将范围变量/函数传递给工厂。

工厂就像服务一样,你可以传递对象/变量/函数,你可以获得对象/变量。

此致 Devang

答案 1 :(得分:0)

你很困惑。请注意,AngularJS是普通的javascript。所有的javascript规则在Angular中也都很好。

如果您对$scope对象有引用,则可以将其传递到任何位置。 $ scope只是一个普通的javascript对象。

不允许将$ scope注入工厂\服务

在上面的示例中,您可以通过调用控制器中的edit($scope)将范围对象传递给函数。没有什么可以阻止你这样做。在这种情况下涉及的风险是,您可以在全局级别保留工厂中的$ scope对象,并且单个服务是单例,范围可能永远不会被释放,从而导致内存泄漏。因此,您应该避免将$scope传递给服务功能。而是将子属性传递给函数,例如edit($scope.user)

同样如前所述,您无法注入$scope。这是不允许的,没有意义。

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