【问题标题】:Angular Service with dynamic scope or var具有动态范围或 var 的 Angular 服务
【发布时间】:2016-01-05 10:05:42
【问题描述】:

我需要一个可以为我提供范围或动态 var 的服务,所以我转向其他控制器。

我对 JSBin 进行了测试,但无法正常工作。

https://jsbin.com/semozuceka/edit?html,js,console,output

angular.module('app', [])

.controller('control1', function($scope, shared) {
    shared.set('teste', {
        testecontroller1: "Apenas um teste"
    });
    $scope.teste = shared.get();
    $scope.teste2 = shared.get();
})

.controller('control2', function($scope, shared) {

    $scope.teste = shared.get('teste');
    shared.set('teste2', {
        testecontroller2: "Apenas um teste"
    });
    $scope.teste2 = shared.get('teste2');

})

.service('shared', function($scope) {

    $scope.data = {};

    this.set = function(key, obj) {
        $scope.data[key] = obj;

    };

    this.get = function(key) {
        return $scope.data[key];
    };

});

【问题讨论】:

  • 你不能在你的服务中注入 $scope。

标签: angularjs angular-services


【解决方案1】:

我会选择工厂服务,因为不需要创建自定义服务。鉴于您的控制器的功能,我创建了一个简单的工厂,如下所示:

.factory('shared', function() {
  var shared;
  var data = {};

  shared = {
    set: setFunc,
    get: getFunc
  };

  return shared;

  function setFunc(key, input){
    data[key] = input;
  }

  function getFunc(key){
    if(key)
      return data[key];
    else return data;
  }
})

可能需要澄清的唯一部分是getFunc。在control1 中,您希望在不指定任何属性的情况下获取data 对象。但是,在 control2 中您确实指定了,这导致了条件 if(key)。所以总结一下,这个函数检查是否有传递的属性参数,并返回相应的数据。

这是一个有效的plunker

您可以在官方documentation 中阅读更多关于不同 Angular 提供程序以及它们之间的比较。

享受吧!

【讨论】:

    【解决方案2】:

    不要尝试使用$scope,因为它会尝试使用scopeProvider。您不能将其注入服务中。此外,服务的输入是一个数组(其中包含一个函数),而不仅仅是一个函数。

    话虽如此,如果您在服务中跟踪变量,则根本不需要范围。

    .service('shared', [function() {
        var data = {};
    
        return {
            set: function(v, val) {
                data[v] = val;
            },
            get: function(v) {
                return (v)? data[v]: data;
            }
        };
    }]);
    

    JSbin

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-23
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      相关资源
      最近更新 更多