据我所知,我们无法在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一起包装在另一个对象中并传递它吗?
或者有更好的选择吗?建议欢迎!
答案 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) {