这似乎是一个愚蠢的问题..但是,在用户使用护照登录后,如何将req.user.username(例如)传递给所有页面/全局。 这个问题可以应用于我希望所有页面都可以访问的任何数据...

在服务器端,我具有以下内容,其中发送允许routeProvider处理所有客户端路由。

app.get('*', 
        function(req, res) {
            res.sendfile('./public/index.html')
            // load the single view file (angular will handle the page changes on the front-end)
    })

我不确定解决方案是否特定于护照...表达方式还是涉及两者...

客户端路由由以下方式处理:

.config(function($routeProvider, $locationProvider) {
        $routeProvider
            .when('/', {templateUrl: 'views/home.html'})
            .when('/login', {templateUrl: 'views/login.html'})
            .when('/users', {templateUrl: 'views/users.html', controller: 'UserController'})
            ...

===============>>#1 票数:0 已采纳

您有两个选择。 要么

  1. 错误 -将这些数据包含在最初投放的已编译视图中(./public/index.html)

  2. GOOD / COMMON-在视图中的Angular控制器等内部获取所需的数据; 例如。


$routeProvider.when('/', {
    templateUrl: 'views/home.html',
    controller: function($scope, myThings) {
        //myThings is a service that async fetches some data from api

        myThings().then(function(user) {
            $scope.user = user;
        });
    }
});

显然,这意味着您正在api端点上公开数据,但是既然您说这是一个单页应用程序,那么angular将如何获取所需的位?

===============>>#2 票数:0

如果要在控制器,指令和其他服务之间共享全局数据,则必须使用服务。

根据数据类型,您可以公开从服务器加载数据的服务或不需要进行远程调用即可加载数据的服务(例如某些自定义视图设置)。

例如,如果要获取当前登录用户。

  • 第一件事是在服务器上创建一个方法,该方法以json格式返回当前登录的用户数据。
  • 然后创建诸如UserService或SessionService之类的东西,这些东西调用此服务器方法来加载当前登录的用户数据。

就像是

angular.module('myApp').factory('SessionService',['$http',function($http) {
    var service={};
    service.getCurrentUser=function() {
        return $http('/user');
    };
    return service;
}]);

将此服务注入您的控制器以获取当前用户。 您可以对其进行优化以缓存用户数据。

如果要在routeProvider中使用数据,请使用resolve属性

.when('/users', {templateUrl: 'views/users.html', controller: 'UserController', 
   resolve: { 
       currentUser:function(SessionService) {
          return SessionService.getCurrentUser();
       }
   }}})

  ask by bcm translate from so

未解决问题?本站智能推荐: