繁体   English   中英

如何在AngularJS上从控制器调用服务上的函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM