AngularJs中的$ routeProvider和$ stateProvider有什么区别?

请解释AngularJs中$routeProvider$stateProvider的区别。

最好的做法是

两者在SPA中都用于路由目的。

1.angular度路由 – 每$ routeProvider文档

控制器和视图的URL(HTML部分)。 它监视$ location.url()并尝试将path映射到现有的路由定义。

HTML

 <div ng-view></div> 

上面的标签将呈现模板从$routeProvider.when()条件,你在.config (configuration阶段)中提到的angular度

限制: –

  • 该页面只能包含单个ng-view页面
  • 如果您的SPA在页面上有多个基于某些条件的$routeProvider$routeProvider失败。 (为了达到这个目的,我们需要使用像ng-includeng-switchng-ifng-show这样的指令,在SPA中它们看起来不好)
  • 你不能像父母和子女关系这样的两条路线之间进行联系。
  • 您无法根据url格式显示和隐藏部分视图。

2. ui-router – per $ stateProvider docs

AngularUI Router是AngularJS的一个路由框架,它可以让你将界面的各个部分组织成一个状态机。 UI-Router是围绕状态组织的,它可以有select地包含路由以及其他行为。

多个&命名的视图

另一个很好的特性是能够在模板中拥有多个UI视图。

虽然多个并行视图是一个强大的function,但通常可以通过嵌套view和将这些视图与嵌套状态进行配对来更有效地pipe理接口。

HTML

 <div ui-view> <div ui-view='header'></div> <div ui-view='content'></div> <div ui-view='footer'></div> </div> 

ui-router的大部分function是可以pipe理嵌套的状态和视图。

优点

  • 你可以在单个页面上有多个ui-view
  • 各种视图可以相互嵌套,并通过在路由阶段定义状态来维护。
  • 我们可以在这里有孩子和父母的关系,就像在国家的inheritance,也可以定义兄弟国家。
  • 你可以通过使用绝对路由来改变状态的ui-view="some"状态。
  • 另一种可以做相对路由的方法是只用@来改变ui-view="some" 。 这将取代ui-view而不是检查是否嵌套。
  • 在这里,您可以使用ui-sref根据状态中提到的URLdynamic创buildhrefurl,也可以给出json格式的状态参数。

欲了解更多信息Angular UI路由器

为了更好的灵活性与国家的各种嵌套视图,我宁愿你去为ui-router

Angular自己的ng-Router在路由时考虑了URLs ,UI-Router除了URL之外还有其他的states

国家必须具有命名,嵌套和并行视图,使您能够有效pipe理您的应用程序的界面。

在ng-router中,当通过<a href="">标签提供链接时,你必须非常小心URL,在UI-Router中你只需要记住state 。 您提供了像<a ui-sref="">这样的链接。 请注意,即使您在UI-Router中使用<a href=""> ,就像在ng-router中一样,它仍然可以工作。

因此,即使您决定在某天更改您的url,您的state也会保持不变,您只需在.config处更改url即可。

虽然ngRouter可用于制作简单的应用程序,但UI-Router使复杂应用程序的开发变得更加容易。 在这里它的wiki。