【问题标题】:AngularJS - Alternative to $scope in a factoryAngularJS - 工厂中 $scope 的替代品
【发布时间】:2015-04-04 07:54:32
【问题描述】:

我知道我们不能像下面给出的那样在 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 一起包装在另一个对象中并传递它?

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

【问题讨论】:

    标签: angularjs service scope factory


    【解决方案1】:

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

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

    问候, 德旺

    【讨论】:

    • 我没明白。如果在工厂中无法访问 $scope,那么在工厂中传递 $scope 变量似乎是一个矛盾的陈述!
    • 没有。它将作为对象传递。 ($scope 作为工厂中的对象)
    • 先生!如果我没记错的话,将 $scope 传递给工厂会出错,它对你有用吗?即使它确实有效,那么请告诉我如果无法访问它有什么意义(你说这个)?希望您能收到我的询问!
    • 是的。 $scope 传递给服务对我有用。但是您可以访问变量,例如编辑: function(factoryScope) { console.log(factoryScope.a); factoryScope.a++;返回工厂范围;}
    【解决方案2】:

    你把事情弄糊涂了。记住AngularJS 是普通的javascript。所有 javascript 规则在 Angular 中也适用。

    如果你有一个$scope 对象的引用,你可以在任何地方传递它。 $scope 只是一个普通的 javascript 对象。

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

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

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

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

    【讨论】:

    • 那么我在我的代码中写的是对的吗?还有其他选择吗?
    • 再一次,任何在 js 中工作的东西都可以在这里工作。你可以通过任何东西。还要记住对象是作为引用传递的(因此它的子属性被改变了),而 int、bool 等作为值传递,所以函数不能改变它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多