使用异步数据初始化AngularJS配置块
在定义AngularJS应用程序的路由时,为了指示每个路由应具有的访问级别,已为每个路由添加了一个名为access的新属性.这基于
here所述的客户端授权方法.
.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或其他方式获取访问权限并手动引导您的应用程序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |