为什么此 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";
};
}
});
场景:
我想使用此服务来共享我的 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";
};
}
});