方案:
我想使用此服务在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"
};
});
问题:
在上面的代码中我有一个服务,其中有两个测试对象(以前只有一个测试对象,第二个是为了测试目的而添加),那些测试对象应该从这个服务返回到一些contrellers函数,就像在“progressBarDynTyped00”控制器中一样,因为我需要在这些对象中获取并设置一些值。
从服务中调用所有已重新调整的函数,总是给我一个未定义的对象或“未读取属性'dynMultiplier'的未定义”。
问题:
有没有办法返回将对象名称传递给服务函数的动态对象?
感谢所有人。
答案 0 :(得分:2)
我认为您在Angular中创建服务的两种方式之间感到困惑:使用service keyword和factory keyword
对于service关键字,应该通过将公共函数分配给它来使其可用:
angular.module('myApp', ['ui.bootstrap', 'ngTouch', 'ngAnimate']).service('sharedProps', function () {
this.getDynObject = function (anObjNameDest) {
//...
};
}]);
并不期望有回报价值。因此,使用上面的代码,没有要调用的公共函数,这解释了错误
答案 1 :(得分:1)
角度服务是角度工厂的简化版本。所以你应该使用工厂而不是服务
myApp.service('myservice', function() {
this.method = function() {
return "result";
};
});
myApp.factory('myfactory', function() {
return {
method : function() {
return "result";
};
}
});