在Angular控制器中共享当前用户信息

时间:2016-04-06 09:00:17

标签: angularjs

我正在使用Angular 1.5,我调用web api(/ api / users / self)来获取有关当前经过身份验证的用户(name,id,...)的信息,以便我可以在Angular控制器上使用该信息。

(function () {

  "use strict";

  angular.module("app").controller("MessageInboxController", MessageInboxController);

  MessageInboxController.$inject = ["$timeout", "messageService", "userService"];

  function MessageInboxController($timeout, messageService, userService) {

    var vm = this;

  }

})();

在消息控制器上,我将调用UserService以获取当前用户信息。

所以在许多控制器中我需要这样做......

有没有办法调用UserAPI一次并与所有控制器共享此信息?

你有什么建议?

2 个答案:

答案 0 :(得分:2)

创建服务以存储您的数据并注入将其存储到您的控制器中:

var myApp = angular.module('myApp', []);

myApp.factory('DataRepo', function() {
		var data = {
    		name: 'Superhero'
    };
    
    return {
    		data: data
    };
});

myApp.controller('MyCtrl1', function($scope, DataRepo) {
    $scope.name = DataRepo.data.name;
});

myApp.controller('MyCtrl2', function($scope, DataRepo) {
		$scope.DataRepo = DataRepo;
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="myApp">

  <div ng-controller="MyCtrl1">
    Hello, {{name}}!
  </div>

  <div ng-controller="MyCtrl2">
    Hello, {{DataRepo.data.name}}!
  </div>

</div>

答案 1 :(得分:0)

执行此操作的最佳方法是使用身份验证服务并将用户对象保留在缓存中。

如果您在从Web应用程序呈现用户对象时将其与Main页面一起发送:

// Authentication service for user variables
angular.module('users').factory('Authentication', ['$window',
    function($window) {
        var auth = {
            // if you are sending the user object when rendering the page
            user: $window.user
        };
        return auth;
    }
]);

您可以在所有控制器中注入此服务,并通过Authentication.user。

与用户联系

或者您可以使用角度服务调用Web服务。

在您的服务中,如果用户对象为null,则调用Web服务(如果非null)返回用户。