.config块看起来如下所示:
app.config(['$routeProvider','$locationProvider','$httpProvider',function ($routeProvider,$locationProvider,$httpProvider) { var access = routingConfig.accessLevels; //Initialize with asynch data instead $routeProvider. when('/home',{ templateUrl: '/Templates/home.html',controller: 'homeController',access: access.user }); $routeProvider. when('/private',{ templateUrl: '/Templates/private.html',controller: 'adminController',access: access.admin }); //...more route configurations }]);
抛开该方法的核心逻辑,我只想知道如何使用一些异步数据初始化访问变量,以便在为每个路由定义访问属性时可用它?这是必需的,因为只有服务器知道访问级别列表.
虽然有一个基于揭露服务承诺的Initialize AngularJS service with asynchronous data的答案&在路由配置中使用resolve,它在我的情况下不起作用,因为我需要在定义路由配置之前解析异步调用,因为access属性依赖于异步数据.
我有什么选择? promise/deferred方法仍然可以以某种方式使用吗?
任何建议将不胜感激.
编辑:
为了描述访问正在做什么,它由一个名为routingConfig的单独模块填充.在approach中,用户可以属于某个角色,该角色被定义为二进制数.例如,public:001,user:010,admin:100(等等).
任何路由的访问级别将再次是由允许访问它的所有用户角色的OR操作定义的二进制数.因此对于例如如果用户角色用户(010)和admin(100)可以访问用户访问级别,则其位掩码将为110.稍后检查路由上的访问权限,我们可以对用户角色和访问进行AND操作-level以查看它是否被授权.细节可以在上面的链接中看到.
请注意,服务器端的数据仍然是更复杂的算法,因此即使在客户端操作上述逻辑,这样的用户也只能看到任何未授权页面的标记.
再次,回到手头的问题.如何使用来自服务器的异步数据初始化在配置块中用作属性的访问权限.此数据可能如下所示:
accessLevels : { 'public' : '111','user' : '110','admin': '100' }
解决方法
也许这种方法是适当的[在许多类似的情况下肯定应该是]:
<script src="angular.js"></script> <script> angular.module('config').constant( <%= // JSON.stringify your config and access %> ); </script> <script src="app.js"></script>
如果您真的必须异步完成它,那么使用XHRHttpRequest或其他方式获取访问权限并手动引导您的应用程序.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。