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-include
,ng-switch
,ng-if
,ng-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创buildhref
url,也可以给出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。