角度ui-router最佳实践继承vs元数据

mas*_*plo 10 angularjs angular-ui-router

我正在将我的应用程序从ngRoute转换为uiRouter.我已阅读并观看了很多教程,但我仍然缺乏决定最佳实践的经验.

首先,我所做的一项重大改变是将状态声明分解为每个模块/控制器.这对我来说感觉更自然,更清洁,但是当想要将全局规则应用于许多州时会引入一些复杂性.例如,我的一半路线需要验证,而另一半则不需要.使用ngRoute,我有一个数据属性,表示每个路由所需的auth级别.使用uiRouter,我知道有这样做的方式,并且有状态继承方式.所以路由可以是public.myRoute,其中public是在应用程序级别声明的抽象路由.如果某人没有定义公共状态,则模块无法独立工作会产生问题.相反,如果我在数据对象中添加元数据属性,如"auth_level:user",如果没有人处理它,这将不会影响模块.但这感觉更"神奇",更难以维护.

导航栏出现同样的问题.我的一半观点有一个导航栏而另一半没有.到目前为止,我使用了一个isNavbarVisible布尔属性但我明白这应该是状态的一部分?也许在layout.html模板中第二个ui-view而不是使用ng-include和ng-if,因为我到目前为止呢?

最后,我想知道要求解决每条路线的承诺的最佳做法.例如,无论应用程序入口点在何处,都应在加载视图之前首先解析用户权限.在ngRoute中,我循环遍历其定义中的所有路由并添加该承诺.

从ngRoute迁移到uiRouter时,是否有一个很好的最佳实践指南,因为除了通常的建议,如"替换ng-include",名称为ui-view或者应该首选状态继承,我还没有找到任何具体的实现演示那.

BKM*_*BKM 0

ui-router是一个第三方模块,功能非常强大。它支持普通功能ngRoute所能做的一切以及许多额外的功能。

以下是选择 ui-router 而不是 ngRoute 的一些常见原因
ui-router 允许嵌套视图多个命名视图。这对于较大的应用程序非常有用,您可能有从其他部分继承的页面。

ui-router 允许您根据状态名称在状态之间进行强类型链接。当您使用 构建链接时,更改一处的 url 会将每个链接更新为该状态ui-sref。对于 URL 可能发生变化的大型项目非常有用。

还有装饰器的概念,可用于根据尝试访问的 URL 动态创建路由。这可能意味着您无需事先指定所有路线。

states允许您映射和访问有关不同州的不同信息,并且您可以通过 轻松地在州之间传递信息$stateParams

$state您可以轻松确定您是否处于某个状态或某个状态的父状态,以通过ui-router 提供的全局调整模板中的 UI 元素(突出显示当前状态的导航)

总体而言,ngRoute 仅允许您将控制器和模板分配给 URL 路由,而 中的基本抽象ui.routerstates,这是一个更强大的概念。