2015-02-06 61 views
0

我有一个相当简单的角度应用程序(工作在MEAN堆栈),不使用ui路由器(我想现在保持这种状态)。角度:跨控制器共享登录状态

我在想什么跨应用共享用户“登录”状态的最佳方式是。

举例来说,我想一个指令,以显示“注册或登录”如果用户没有登录,或者“你好,用户名”,如果用户登录。

在我的应用程序,许多指令请参阅登录状态,因此似乎使用多个控制器并在每个控制器上声明登录$scope属性并不是最好的主意。我怎么能做到这一点?

作为后续,关于如何知道用户是否登录的最佳方式的任何建议?现在我正在基于存储在本地存储中的auth-token,但它也可能是cookie。

我想知道一种最佳实践方式,我可以存储的不仅仅是用户的登录状态,还包括他们的信息(名称,项目摘取等),并保持同步到我的服务器(如果他们登录另一台电脑,他们的购物车将持续)。

感谢

+0

分享整个登录的布尔控制器与工厂。工厂数据在控制器之间共享的简单示例http://stackoverflow.com/a/21924873/1803298 – cheekybastard 2015-02-06 02:32:30

回答

0

写服务:

angular.module('myApp') 
.service('Auth', function() { 
    var loggedInState = {}; // log in state data 

    var logIn = function() { 
     // send log in request 
    } 

    return { 
     state: loggedInState, 
     logIn: logIn 
    } 
}) 

现在你到处注入这个服务,你想知道,如果他们登录,并检查状态

+0

好吧,那么如果我想有条件地显示或隐藏某个指令中的某些内容,那么这个注入,我该怎么做。换句话说,如何访问这个'Auth'服务的属性,并在注入后将它们设置为'$ scope'在指令中? – Startec 2015-02-06 02:53:23

+1

在控制器中注入服务,并将您需要的服务从服务分配到控制器范围,或者如果您愿意,可将整个服务分配给控制器。 – 2015-02-06 02:54:27

+0

明白了。我明白了,将控制器注入指令的'controller'属性。 – Startec 2015-02-06 02:58:18