AngularJS从外部控制器调用公共控制器功能

时间:2014-05-01 07:09:05

标签: javascript angularjs angularjs-service angularjs-controller

我的基本前提是我想回到服务器以获取登录用户,以防有人访问该站点并仍然登录。在页面上我想调用此方法。由于我将用户服务传递给我的所有控制器,我不知道哪个控制器将被使用,因为我不知道他们登陆的是哪个页面。

我有以下用户服务

app.factory('userService', function ($window) {
    var root = {};
    root.get_current_user = function(http){
        var config = {
        params: {}
    };
    http.post("/api/user/show", null, config)
        .success(function(data, status, headers, config) {
            if(data.success == true) {
                user = data.user;

                show_authenticated();
            }

        });
    };
    return root;
});

这是一个空控制器,我正在尝试将服务注入

app.controller('myResourcesController', function($scope, $http, userService) {

});

因此,在我的索引文件的顶部,我希望有一些类似

的内容
controller.get_current_user();

这将从所有页面调用,所以我不确定这里的语法。我发现的所有示例都与调用特定控制器有关,通常来自另一个控制器。也许这需要在某个地方进入我的angularjs,而不仅仅是在索引页面上的脚本标记内。

2 个答案:

答案 0 :(得分:2)

您可以在角度应用程序的run方法中运行工厂初始化。 https://docs.angularjs.org/guide/module#module-loading-dependencies E.g。

app.run(['userService', function(userService) {
  userService.get_current_user();
}]);

userService工厂应该存储经过身份验证的用户对象。

...
if (data.success == true) {
  root.user = data.user;
}
...

然后您就可以在任何控制器中使用您的工厂

app.controller('myController', ['userService', function(userService) {
   //alert(userService.user);
}]);

答案 1 :(得分:1)

您需要通过工厂构造函数注入$ http,以获取第一个

app.factory('userService', function ($window, $http) {
    var root = {};
    root.get_current_user = function(){
        var config = {
        params: {}
    };
    $http.post("/api/user/show", null, config)
        .success(function(data, status, headers, config) {
            if(data.success == true) {
                user = data.user;

                show_authenticated();
            }

        });
    };
    return root;
});
在你的控制器中你可以说

$scope.get_current_user = UserService.get_current_user();
如果需要,在你的html中输入属性。除此之外,我不确定你需要什么。