为什么此 AngularJs 具有可变对象名称 return 的服务是未定义的对象?

Why does this AngularJs Service with variable object name return an undefined object?

场景:

我想使用此服务来共享我的 webApp 中的一些属性。 此服务内部应该有一些对象,并且控制器应该能够获取和设置这些对象。

JS:

var oneApp = angular.module('myApp', ['ui.bootstrap', 'ngTouch', 'ngAnimate'])
  .service('sharedProps', function() {
    var anObjNameDest = '';
    var anObjPropName = '';

    this.progressBarDynTyped00 = {
      dynamic: 0,
      dynMultiplier: 10,
      max: 100
    };

    var progressBarDynTyped00 = {
      dynamic: 1000,
      dynMultiplier: 10010,
      max: 100100
    };


    var test = this.progressBarDynTyped00;

    var test2 = progressBarDynTyped00;

    return {
      getDynObject: function(anObjNameDest) {
        return this[anObjNameDest];
      },
      getDynObjectVal: function(anObjNameDest, anObjPropName) {
        return this[anObjNameDest][anObjPropName];
      },
      setDynObjectVal: function(anObjNameDest, anObjPropName, value) {
        this[anObjNameDest][anObjPropName] = value;
      },
      setDynObject: function(anObjNameDest, ObjSrc) {
        this[anObjNameDest] = ObjSrc;
      }
    }
  });


oneApp.directive("progressBarDynTyped", function() {
    return {
      restrict: "E",
      templateUrl: "aTemplateUrl.html",
      controller: function(sharedProps) {

        this.test = sharedProps.getDynObject('progressBarDynTyped00');

        this.dynMultiplier 
                = sharedProps.getDynObjectVal('progressBarDynTyped00', 'dynMultiplier');
      },
      controllerAs: "progressBarDynTyped00"
    };

  });

问题:

在上面的代码中,我有一个服务,其中有两个测试对象(以前只有一个,第二个是为测试目的添加的),这些测试对象应该是 returned这项服务适用于某些控制器功能,例如 "progressBarDynTyped00" 控制器,因为我需要在这些对象中获取和设置一些值。

从服务调用所有重新调整的函数总是给我一个未定义的对象或 "Cannot read property 'dynMultiplier' of undefined"。

问题:

有没有办法return动态对象将对象的名称传递给服务函数?

感谢大家。

我认为您对在 Angular 中创建服务的两种方式感到困惑:使用服务关键字和工厂关键字

对于服务关键字,public 函数应该通过分配给它来提供:

angular.module('myApp', ['ui.bootstrap', 'ngTouch', 'ngAnimate']).service('sharedProps', function () {

    this.getDynObject = function (anObjNameDest) {
       //...
    };

}]);

并且它不期望有 return 值。所以对于上面的代码,没有 public 函数被调用,这就解释了错误

angular 服务是 angular 工厂的简化版本。所以你应该使用工厂而不是服务

myApp.service('myservice', function() {
   this.method = function() {
      return "result";
   };
});

myApp.factory('myfactory', function() {
   return {
      method : function() {
                  return "result";
               };
   }
});