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

时间:2014-04-22 08:31:48

标签: 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时,是否有良好的最佳实践指南,因为除了#34;替换ng-include"之外的通用建议。如果有一个名字ui-view或者首选的是状态继承,我还没有找到任何具体的实现来证明这一点。

2 个答案:

答案 0 :(得分:1)

我和问题作者的情况相同,这里有一些关于如何推动这一变化的非常有趣的信息。 https://github.com/angular-ui/AngularJS-StyleGuide

答案 1 :(得分:0)

ui-router是第三方模块,非常强大。它支持普通ngRoute可以执行的所有操作以及许多额外功能。

以下是ui-router比ngRoute选择的一些常见原因 ui-router允许nested viewsmultiple named views。这对于较大的应用程序非常有用,您可以从其他部分继承页面。

ui-router允许您根据州名称在状态之间建立强类型链接。在使用ui-sref构建链接时,在一个位置更改网址会更新指向该状态的每个链接。对于URL可能发生变化的大型项目非常有用。

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

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

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

总的来说,ngRoute只允许您为URL路由分配控制器和模板,而ui.router中的基本抽象是states,这是一个更强大的概念。