Angular2路由器VS ui-router-ng2 VS ngrx路由器

sma*_*use 47 url-routing angular-ui-router angular2-routing ngrx angular

使用ui-router-ng2而不是新的Angular2路由器有什么好处和缺点?在过去,我使用ui-router和Angular 1.x而不是使用ngRoute,因为我需要更好地支持嵌套状态/路由.

那么现在,Angular2呢?我想听听你的意见,以便我能评估这两个机会.

此外,搜索和搜索谷歌我发现ngrx /路由器,我不知道.你能告诉我Angular2 的内置路由器,Angular2和ngrx路由器的新ui路由器之间有什么区别吗?

Mik*_*kki 58

一般信息

NGRX Route r docs

ngrx路由器已弃用!有从ngrx路由器到标准Angular2路由器的迁移策略.

Angular2路由器 文档

  1. Angular团队的默认解决方案
  2. 受到AngularJS的UI路由器的启发
  3. 专为组件而设计

Angular2 Router几乎具有所有UI路由器功能.

NG2 UI-router 文档

来自AngularJS的着名UI路由器已针对Angular2进行了更新.从已知的优势 - 从AngularJS UI-router更新到ng2 UI-router更顺畅.

对比

让我们比较UI-router两个版本与Angular2 Router的语法.

AngularJS UI路由器:

app.config(function($stateProvider){
    $stateProvider.state('home', {
        url: '/home',
        templateUrl: 'home.html',
        controller: 'HomeCtrl'
    })
});
Run Code Online (Sandbox Code Playgroud)

Angular2 UI路由器:

export let state1: Ng2StateDeclaration = {
    name: 'home',
    component: HomeComponent,
    url: '/home'
}

@NgModule({
 imports: [
   SharedModule,
   UIRouterModule.forChild({ states: [home] })
 ],
declarations: [HomeComponent]
})
export class MyModule {}
Run Code Online (Sandbox Code Playgroud)

Angular2路由器:

(更新:属性 - name在V3-alpha7之后被删除.因为它没有解决延迟加载的路由.)

import {
    RouteConfig,
    Route
} from 'angular2/router';
import {HomeComponent} from './components/home';

@Component({})
@RouteConfig([
    new Route({ 
        path: '/home', 
        component: HomeComponent, 
        name: 'Home' // Deprecated property, works until v3-alpha7
    })
])
export class App {...}
Run Code Online (Sandbox Code Playgroud)

我们可以看到,一般来说,Angular2路由器几乎是一样的.另外需要说它支持大多数常见功能,如通过路由的静态/动态数据共享,嵌套视图等.

  • 相同的位置策略(路径和哈希)
  • 类似的路线定义
  • 类似服务:
    • $ state.go和Router.navigate
    • $ stateParams和RouteParams
    • $ state.current.data和RouteData
  • 类似的指令
    • ui-view和router-outlet
    • ui-sref和routerLink

结论

Angular2路由器已经充分利用了UI路由器的经验并实现了它.如果你需要使用AngularJS UI-router轻松地将代码库快速平滑地迁移到Angular2,你可以试试Ng2 UI-router,否则,我认为Angular2路由器最适合.即使您决定使用NG2 UI路由器,检查所有优缺点,目前我觉得社区将选择Angular团队的标准解决方案,这意味着更好的支持.

  • 我们已经尝试了两种,基于状态的Angular 2 UI-Router是我们的第一选择,就像我们构建Angular 1应用程序时一样.支持非常好.强烈建议通过Angular 2 stock router. (9认同)
  • 我不会说Angular 2路由器几乎与UI路由器相同.不是我的个人和我的团队的意见.当然,Angular 2试图从中复制一些功能,但UI路由器的基于状态的UI是基于URL路径的Angular 2路由器(IMHO)的最大优势之一.此外,来自AngularJS世界的人们可以更好地在Angular 2/4中移植现有或开发的新应用程序,因为UI路由器在Angular 1世界中几乎是事实上的路由器. (3认同)
  • 有几个Angular 1.x应用程序,包括带有组件的1.5.x应用程序,可能有一个令人信服的理由坚持使用ui-router,因为它正在最终确定带有组件的NG1的组件路由支持.对于NG1应用程序,Angular团队似乎几乎处于NG2路由器的[后退计划](https://github.com/angular/angular.js/issues/15163).此外,UI-Router文档刚刚进行了改版,并且在我最后一次查看它们时看起来有了很大改进. (2认同)
  • 如果需要命名路由器出口和正常外观的URL,请查看UI路由器。默认路由器中当前命名的出口URL确实很差。(例如`foo.com/my-route(outletA:componentA // outletB:componentB)`) (2认同)