我正在尝试从控制器调用服务上的功能,以便更新我网站上的主题,具体取决于我所在网站的哪个提供商部分。
我的服务,
MyApp.service('ThemeService', function() {
var ThemeProvider = 1;
var ThemeArea = "NotSet";
this.SetVariables = function() {
switch (ThemeProvider) {
case 1:
default:
ThemeArea = "Themes/Default";
break;
case 2:
ThemeArea = "Themes/Provider2";
break;
}
return ThemeProvider;
};
return {
ThemeProvider: ThemeProvider,
getThemeArea: ThemeArea,
};
});
我的控制器
$scope.loadData = function (input) {
ThemeService.ThemeProvider = 2;
ThemeService.SetVariables();
};
我的想法是在控制器内部,功能" SetVariables"可以在" ThemeProvider"之后调用。设置,更改" ThemeArea",但我无法解决如何调用函数" SetVariables"来自我的控制器。
当我尝试时,我收到错误
TypeError:对象不支持属性或方法' SetVariables'
答案 0 :(得分:1)
你没有返回SetVariables
,在服务定义的底部看到有一个return语句,它应该包含你想要访问的所有内容。
return {
ThemeProvider: ThemeProvider,
getThemeArea: ThemeArea,
SetVariables: SetVariables
};
答案 1 :(得分:0)
首先,您的服务返回一个没有任何名为SetVariables
的属性的对象,这就是您收到错误的原因。同时this.SetVariables
将查找已初始化的ThemeProvider
您的服务(var ThemeProvider = 1;
),而不是从控制器分配的值。
您的代码应如下所示:
服务:
MyApp.service('ThemeService', function() {
var _ThemeProvider = 1;
var _ThemeArea = "NotSet";
angular.extend(this, {
SetVariables,
setThemeProvider,
setThemeArea,
getThemeProvider,
getThemeArea
})
function SetVariables() {
switch (_ThemeProvider) {
case 1:
default:
_ThemeArea = "Themes/Default";
break;
case 2:
_ThemeArea = "Themes/Provider2";
break;
}
return _ThemeProvider;
};
function setThemeProvider(val) {
_ThemeProvider = val;
};
function getThemeProvider() {
return _ThemeProvider;
};
function setThemeArea(val) {
_ThemeArea = val;
}
function getThemeArea() {
return _ThemeArea;
}
});
控制器:
$scope.loadData = function(input) {
ThemeService.setThemeProvider(2);
ThemeService.SetVariables();
};