AngularJS从控制器外部调用公共控制器函数

AngularJS call common controller function from outside controller

本文关键字:控制器 函数 外部调用 AngularJS      更新时间:2023-09-26

我的基本前提是,如果有人来到网站但仍在登录,我想回调服务器以获取登录用户。在页面上,我想调用此方法。由于我将用户服务传递给我的所有控制器,我不知道哪个控制器将被使用,因为我不知道它们在哪个页面上着陆。

我有以下用户服务

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的某个地方,而不仅仅是在索引页上的脚本标记中。

您可以在角度应用程序的run方法中运行工厂初始化。https://docs.angularjs.org/guide/module#module-加载依赖项例如

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

您需要通过工厂构造函数注入$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();

ng属性(如果需要(。除此之外,我不确定你需要什么。