[英]How do i call a function on a Service from a Controller, on AngularJS
我试图从控制器调用服务上的函数,以更新我网站上的主题,具体取决于我所在网站的提供商部分。
我的服务
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();
};
我的想法是在控制器内部,可以在设置“ ThemeProvider”后调用“ SetVariables”函数,以更改“ ThemeArea”,但是我无法弄清楚如何从控制器中调用函数“ SetVariables”。
当我尝试时,出现错误
TypeError:对象不支持属性或方法“ SetVariables”
您没有返回SetVariables
,请参阅服务定义底部的return语句,该语句应包含您希望可访问的所有内容。
return {
ThemeProvider: ThemeProvider,
getThemeArea: ThemeArea,
SetVariables: SetVariables
};
首先你的服务返回一个对象,它不具有任何财产称为SetVariables
,这就是为什么你得到error.Also 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();
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.