栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我可以还是应该在Angularjs中使用Global变量来存储登录用户?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我可以还是应该在Angularjs中使用Global变量来存储登录用户?

如果您的(单个)页面由服务器动态呈现,并且服务器知道您是否已登录,则可以执行以下操作:

动态呈现脚本标签,该标签产生:

<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或添加到控制器中的属性发生命名冲突。

不用说,这些东西仅在客户端运行,并且很容易被篡改。您的服务器端代码应始终检查用户并返回正确的数据子集或接受正确的操作。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/595066.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号