Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在AngularJS上从控制器调用服务上的函数_Javascript_Html_Angularjs_Angularjs Service_Angularjs Controller - Fatal编程技术网

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

Javascript 如何在AngularJS上从控制器调用服务上的函数,javascript,html,angularjs,angularjs-service,angularjs-controller,Javascript,Html,Angularjs,Angularjs Service,Angularjs Controller,我试图从一个控制器调用一个服务函数,以更新我网站上的主题,这取决于我所在的网站的哪个提供商部分 我的服务 我的控制器 我的想法是,在控制器内部,设置ThemeProvider后可以调用函数SetVariables,以更改ThemeArea,但我无法确定如何从控制器调用函数SetVariables 当我尝试时,我得到一个错误 TypeError:对象不支持属性或方法“SetVariables” 您没有返回SetVariables,请参见服务定义底部的return语句,它应该包含您希望访问的所有内容

我试图从一个控制器调用一个服务函数,以更新我网站上的主题,这取决于我所在的网站的哪个提供商部分

我的服务

我的控制器

我的想法是,在控制器内部,设置ThemeProvider后可以调用函数SetVariables,以更改ThemeArea,但我无法确定如何从控制器调用函数SetVariables

当我尝试时,我得到一个错误

TypeError:对象不支持属性或方法“SetVariables”

您没有返回SetVariables,请参见服务定义底部的return语句,它应该包含您希望访问的所有内容

return {
    ThemeProvider: ThemeProvider,
    getThemeArea: ThemeArea,
    SetVariables: SetVariables
};

首先,您的服务返回一个对象,该对象没有任何名为SetVariables的属性,这就是您出现错误的原因;而不是控制器指定的值

您的代码应该如下所示:

服务:

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();
};
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();
};