2016-04-06 12 views
0

私はAngular 1.5を使用しています。私は使用できるように現在の認証されたユーザー(名前、ID、...)に関する情報を得るためにWeb API(/ api/users/self)私の角度制御器に関するその情報。角度コントローラの現在のユーザー情報を共有

(function() { 

    "use strict"; 

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

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

    function MessageInboxController($timeout, messageService, userService) { 

    var vm = this; 

    } 

})(); 

メッセージコントローラでは、現在のユーザー情報を取得するためにUserServiceを呼び出します。

だから... ...私はこれを行う必要がある多くのコントローラで

は、すべてのコントローラーでこの情報を一度UserAPIを呼び出し、共有する方法はありますか?

あなたのアドバイスは何ですか?

+1

ストアあなたのサービスや価値の変数にユーザ情報 – Aliz

答えて

0

これを行う最善の方法は、認証サービスを使用してユーザーオブジェクトをキャッシュに保持することです。

それはウェブアプリからレンダリングされるときは、メインページを伴って含むユーザーオブジェクトを送信する場合:あなたはすべてのあなたのコントローラでこのサービスを注入し、Authentication.userを介してユーザに取得することができ

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

または、アングルサービスからWebサービスを呼び出すことができます。

サービスでは、ユーザーオブジェクトがnullの場合、nullでない場合はWebサービスを呼び出します。

2

にデータを保存するためにサービスを作成し、はあなたコントローラそれを注入:

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

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

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

 
myApp.controller('MyCtrl2', function($scope, DataRepo) { 
 
\t \t $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>

関連する問題