在AngularJS中管理同步服务器端数据的最佳方法

时间:2013-02-08 19:46:19

标签: angularjs

我正在使用Oauth管理AngularJS应用中的会话用户。我的Angular应用程序需要知道有关会话用户的信息,因为它在我的$ resource对象中使用(用于进行REST调用,如GET / user /:user / projects)。我希望这个用户变量是全局的并且同步,因此使用$ resource或$ http进行异步调用以使用户将样板添加到需要此会话用户的代码中(因为它必须等待从服务器返回的用户信息。)

现在我正在使用这个解决问题的脏黑客:在我的index.ejs文件中(注意用户使用ejs呈现服务器端)

    <script type="text/javascript">

    var session_user =  <%- user  %>;

    </script>

然后我做

$rootScope.user = session_user

问题是当我对控制器进行单元测试时,当然没有定义session_user。

我在想,也许我可以创建一个返回此session_user变量的服务,因此我可以使用模拟进行测试。还有其他想法吗?这种问题的推荐方法是什么?

1 个答案:

答案 0 :(得分:2)

实际上看起来并不是那么脏的黑客。只有当会话用户在没有从服务器重新加载html的情况下进行更改(从而获得新的会话用户)时,这似乎才有问题。

Angular模块有一个constant函数,我用它来做这类事情:

angular.module("MyModule", [])
       .constant("User", window.session_user);

然后您可以将User视为控制器中的可注射值。