请解释AngularJS中$routeProvider
和$stateProvider
之间的区别。
哪种是最佳做法?
答案 0 :(得分:242)
两者都做与在SPA(单页应用程序)中用于路由目的相同的工作。
控制器和视图的URL(HTML部分)。它看 $ location.url()并尝试将路径映射到现有路由 定义
HTML
<div ng-view></div>
上面的代码会根据您在$routeProvider.when()
(配置阶段)中提到的.config
条件呈现模板
限制: -
ng-view
$routeProvider
将失败。 (要实现这一点,我们需要使用ng-include
,ng-switch
,ng-if
,ng-show
这样的指令,这些指令在SPA中看起来很糟糕。AngularUI路由器是AngularJS的路由框架,它允许 您可以将界面的各个部分组织到状态机中。 UI-Router围绕状态进行组织,可以选择具有 附加路线以及其他行为。
多个&amp;命名视图
另一个很棒的功能是能够在模板中拥有多个ui视图。
虽然多个并行视图是一个强大的功能,但您通常可以通过嵌套view
并将这些视图与嵌套状态配对来更有效地管理界面。
HTML
<div ui-view>
<div ui-view='header'></div>
<div ui-view='content'></div>
<div ui-view='footer'></div>
</div>
ui-router
的大部分权力是它可以管理嵌套状态&amp;视图。
<强>赞成强>
ui-view
ui-view="some"
绝对路由来更改状态的@
。@
来更改ui-view="some"
。这将替换ui-view
,而不是检查它是否嵌套。ui-sref
根据州内提到的href
动态创建URL
网址,也可以在json
中提供状态参数格式。For more Information Angular ui-router
为了更好地灵活使用状态的各种嵌套视图,我希望您选择ui-router
答案 1 :(得分:73)
Angular自己的ng-Router在路由时需要URLs
,除了URL之外,UI-Router还需要states
。
状态绑定到命名,嵌套和并行视图,允许您有力地管理应用程序的界面。
在ng-router中,在通过<a href="">
标记提供链接时必须非常小心,在UI-Router中,您必须记住state
。您提供<a ui-sref="">
等链接。请注意,即使您在UI-Router中使用<a href="">
,就像在ng-router中一样,它仍然有效。
因此,即使您决定某天更改网址,您的state
也会保持不变,只需在.config
更改网址。
虽然ngRouter可用于制作简单的应用程序,但UI-Router可使复杂的应用程序更容易开发。这是wiki.
答案 2 :(得分:0)
$ route:这用于将URL深度链接到控制器和视图(HTML局部),并监视$ location.url()以便从现有路由定义中映射路径。
使用ngRoute时,路由使用$ routeProvider配置,而当使用ui-router时,路由使用$ stateProvider和$ urlRouterProvider配置。
<div ng-view></div>
$routeProvider
.when('/contact/', {
templateUrl: 'app/views/core/contact/contact.html',
controller: 'ContactCtrl'
});
<div ui-view>
<div ui-view='abc'></div>
<div ui-view='abc'></div>
</div>
$stateProvider
.state("contact", {
url: "/contact/",
templateUrl: '/app/Aisel/Contact/views/contact.html',
controller: 'ContactCtrl'
});