在Angular.js中存储多个控制器的值的惯用方法是什么?

时间:2013-08-12 19:50:47

标签: angularjs

我的应用程序的后端使用rest api,要求用户通过基本身份验证登录。这意味着他们进行的每次通话都要求他们发送用户名和密码。但我希望我的应用程序隐藏用户的这个细节。是的,他们将有一个登录页面,他们输入用户名和密码,但从那时起,他们应该不知道他们是为每个后端呼叫发送用户名/密码。

我的问题是,如何在用户提交登录页面后在客户端保存用户名/密码,以便以后可以在每次休息时使用它?

This is almost my question,但区别在于

  1. 我没有像他一样使用常数
  2. 我的值无法在模块配置时初始化
  3. 我不确定这个答案是否是惯用的
  4. 旁注:我相信有些人会留下评论说:“你不应该这样做!”很公平,但这不回答我的问题。还有其他用例需要在客户端存储一个只能在操作后初始化的值。这就是我想要学习的内容。

1 个答案:

答案 0 :(得分:7)

我建议将值存储在服务中,并将该服务注入您需要该值的任何位置。在配置时,您可以将值设置为undefined,然后只要值可用就可以填充它。这也允许您使用$ watch来确定何时设置该值。

我还要看一下HTTP Auth Interceptor Module for AngularJS.

这是一个rough example来说明这个概念。

<div ng-app="exampleApp">
    <div ng-controller="controller1">   
        {{ sharedData.someData }}
    </div>
    <div ng-controller="controller2">   
        <button ng-click="sharedData.someData='otherData'">Set Data</button>
    </div>
</div>


angular.module('exampleApp', []).controller('controller1', function(sharedData, $scope){
    $scope.sharedData = sharedData;      
}).controller('controller2', function(sharedData, $scope){
    $scope.sharedData = sharedData;       
}).service('sharedData', function(){
   this.someData = "test";
   return this;
});