如果您的(单个)页面由服务器动态呈现,并且服务器知道您是否已登录,则可以执行以下操作:
动态呈现脚本标签,该标签产生:
<script> window.user = { id: 1234, name: 'User A', isLoggedIn: true };</script>对于非登录用户:
<script> window.user = { isLoggedIn: false };</script>为方便起见,请将用户复制到angular的IOC内的值:
angular.module('myApp').value('user', window.user);然后,您可以在DI中使用它:
angular.module('myApp').factory('myService', function(user) { return { doSomething: function() { if (user.isLoggedIn) { ... } else { ... } } };});棘手的事情(在执行[SEE COMMENTS]之前应该进行两次操作)正在 扩展 $ scope:
angular.module('myApp').config(function($provide) { $provide.decorator('$controller', function($delegate, user) { return function(constructor, locals) { locals.$scope._user = user; return $delegate(constructor, locals); }; });});这段代码修饰了
$controller服务(负责构造控制器),并且基本上说
$scope,将在对象传递给控制器之前,将通过
_user属性进行增强。
让它自动$ scoped意味着您可以在任何地方的任何视图中直接使用它:
<div ng-if="_user.isLoggedIn">Content only for logged-in users</div>
这有些冒险,因为您可能最终会与原始$ scope API或添加到控制器中的属性发生命名冲突。
不用说,这些东西仅在客户端运行,并且很容易被篡改。您的服务器端代码应始终检查用户并返回正确的数据子集或接受正确的操作。



