【发布时间】:2016-07-12 17:38:09
【问题描述】:
我正在使用 AngularJs 和 ui-router 构建一个应用程序。这是一个具有这种结构的管理面板:
- 未通过身份验证
- 已通过身份验证
- 管理面板
- 客户端面板
对于每个经过身份验证的状态,应用程序需要加载不同的内容并提供对不同信息的访问权限,例如:
- 管理员:可以查看包含所有客户、产品等的列表...
- 客户:只能看到他的产品、门票等...
当用户登录时,我检查他是管理员还是客户端,然后通过延迟加载,我只加载他需要的模块。例如,客户端不需要模块来显示所有客户端的列表。
这是我目前的结构:
-index.html -> view:main
--login.html
--error.html
-app.html -> view:app
--restricted.html
--notFound.html
-app_adm -> view:app-adm -> lazyload admModule.js
--home_adm.html
--listClient.html
--listProducts.html
--listFinancial.html
etc...html
-app_cli -> view:app-cli -> lazyload cliModule.js
--home_cli.html
--userData.html
--products.html
--tickets.html
etc...html
index.html
<div ui-view="main"></div>
app.html
<nav>
[..content here..]
</nav>
<div ui-view="app"></div>
<footer>
[..content here..]
</footer>
app_adm.html
<div ui-view="app-adm"></div>
app_cli.html
<div ui-view="app-cli"></div>
感觉使用这 2 个额外的 app(adm 和 cli)不太正确,但直到现在我才发现它只在我需要的地方加载文件。
有没有更好的方法来改进这种结构?
注意:我尝试将状态 app-adm 和 app-cli 设置为没有 templateUrl 的状态,并使用与状态 app 相同的视图,但没有成功。
【问题讨论】:
-
嗯,它有点棘手..但你做得很正确......我想你已经处理了客户端“意外”在管理 url 中键入并且没有通过的情况并被重定向回来?...除此之外..常见的问题应该放在一个公共文件夹中,而它们的区别应该放在相应的文件夹中..
-
文件夹结构我按照 John Papa 风格指南做得很好。并且通过解析功能控制访问以检查用户角色。即使尝试并且可以以某种方式访问管理员视图,http 请求也具有令牌验证以检查用户是客户端还是管理员。唯一令人头疼的是视图结构本身。我认为会有一种简单的方法来做到这一点。因为 Angular 总是有一种非常简单的方法来做事。=D
标签: angularjs angular-ui-router