路由(route),几乎所有的MVC(VM)框架都应该具有的特性,因为它是前端构建单页面应用(SPA)必不可少的组成部分。
那么,对于angular而言,它自然也有内置的路由模块:做ngRoute。
不过,大家很少用它,因为它的功能太有限,往往不能满足开发需求!!
于是,一个基于ngRoute开发的第三方路由模块,叫做ui.router,受到了大家的“追捧”。

那么它们有什么不同呢?

  1. ngRoute在路由配置时用$routeProvider
  2. ui-router路由配置时用 $stateProvider$urlRouterProvider
  3. ngRoute是官方路由。
  4. ui-route是第三方路由。
  5. ngroute是用AngularJS框架的核心部分。
  6. ui-router是一个社区库,它是用来提高完善ngroute路由功能的。
  7. ui-router允许嵌套视图(nested views)和多个命名视图(multiple named views)。

接下来看看ngRoute模块和ui.router模块各自都提供了哪些服务,哪些指令?

ng-router

  1. $routeProvider–用于进行路由配置的内置服务
  2. $routeParams–径性路由参数传递时使用的一个内置服务
  3. ng-view–用于展示对应模板的指令

ui-router

  1. $stateProvider–ui路由中状态的服务提供者。
  2. $urlRouterProvider–用于默认访问位置的指定。
  3. views–用于进行多数据展示的情况。
  4. ui-view–主要进行目标视图模板的展示。
  5. ui-sref–该属性主要用于替换HTML中a标签的href属性,用于指定目标路由的名称。

从上述看,其实ui.router和ngRoute大体的设计思路,对应的模块划分都是一致的!
那么ui-Router解决了原生的ng-route哪些不足呢?

多视图—页面可以显示多个动态变化的不同区块。

比如:页面一个区块用来显示页面状态,另一个区块用来显示页面主内容,当路由切换时,页面状态跟着变化,对应的页面主内容也跟着变化。

首先,我们尝试着用ngRoute来做:

html页面:

<div ng-view>区块1</div>
<div ng-view>区块2</div>

JS代码:

$routeProvider.when('/', {template: 'hello world'
});

我们在html中利用ng-view指令定义了两个区块,于是两个div中显示了相同的内容,这很合乎情理,但却不是我们想要的,但是又不能为力,因为,在ngRoute中:

  1. 视图没有名字进行唯一标志,所以它们被同等的处理。
  2. 路由配置只有一个模板,无法配置多个。

针对上述两个问题,我们尝试用ui.router来做:

HTML页面:

<div ui-view></div><div ui-view="status"></div>

JS代码:

$stateProvider.state('home', {url: '/',views: {'': {template: 'hello world'},'status': {template: 'home page'}}});

这次,结果是我们想要的,两个区块,分别显示了不同的内容,原因在于,在ui.router中:

  1. 可以给视图命名,如:ui-view=”status”。
  2. 可以在路由配置中根据视图名字(如:status),配置不同的模板(其实还有controller等)。

嵌套视图:页面某个动态变化区块中,嵌套着另一个可以动态变化的区块。

AngularJS中ngRouter和uiRouter的区别相关推荐

  1. angularjs 中的$digest和$apply区别

    $digest和$apply 在Angular中,有$apply和$digest两个函数,我们刚才是通过$digest来让这个数据应用到界面上.但这个时候,也可以不用$digest,而是使用$appl ...

  2. angularjs 中 Factory,Service,Provider 之间的区别

    本片文章是使用了 angularjs 中使用 service 在controller 之间 share 对象和数据 的code(http://jsfiddle.net/kn46u0uj/1/) 来进行 ...

  3. 理解AngularJS中的依赖注入

    作者 CraftsCoder 冷月无声 - 博客频道 - CSDN.NET http://blog.csdn.net/jaytalent/article/details/50986402 本文结合一些 ...

  4. 如果我有jQuery背景,那么“ AngularJS中的思考”吗? [关闭]

    已关闭 . 这个问题需要更加集中 . 它当前不接受答案. 想改善这个问题吗? 更新问题,使其仅通过编辑此帖子来关注一个问题. 4年前关闭. 已锁定 . 该问题及其答案被锁定,因为该问题是题外话,但具有 ...

  5. AngularJS中页面传参方法

    1.基于ui-router的页面跳转传参 (1) 用ui-router定义路由,比如有两个页面,一个页面(producers.html)放置了多个producers,点击其中一个目标,页面跳转到对应的 ...

  6. Angularjs中的IGGird创建和使用

    AngularJs Ignite 中的Iggrid 官网:http://www.igniteui.com/grid/angular Angularjs的Iggrid使用有两种方式,第一种为iggrid ...

  7. python中break和continue的区别

    python中break和continue的区别 break 结束for 或者while 循环  后面还没循环到的 不再循环 continue 当满足某种条件时结束当前值的循环 后面没有循环的继续循环 ...

  8. java中separator_java - File.separator和路径中的斜杠之间的区别

    java - File.separator和路径中的斜杠之间的区别 在Java Path-String中使用/和普通的File.separator有什么区别? 与双反斜杠相比,/平台独立似乎不是原因, ...

  9. PHP中self和static的区别,php中self与static的区别

    原文链接,猛击这里. php中self与static的区别 通过一些示例,我们可以很容易看出self和static的区别.假定我们有class Car – 它有两个方法,model和getModel. ...

最新文章

  1. SpringBoot实现微信点餐
  2. 2021CCF BDCI 大数据与计算智能大赛参赛指南
  3. firefox 中碰到的一个小坑
  4. npm安装过程出现的问题及解决方式
  5. [导入]PHP5的异常处理
  6. 解决方案:无源(PON)光网络在弱电工程中的应用
  7. BZOJ 3156: 防御准备( dp + 斜率优化 )
  8. 关于一致/非一致代码段与TSS 关系的个人看法
  9. leetcode之回溯backtracing专题5
  10. idea 连接云mysql_IDEA开发环境下配置JDBC连接MySQL
  11. jquery的DOM节点操作(创建和插入元素节点)
  12. jupyter notebook怎么画决策树图_状态图怎么画?图文详解快速上手UML图
  13. python破解wifi字典_利用Python自动生成暴力破解的字典
  14. Appium连接教程
  15. 超简单全面的html图片自动轮播
  16. 2019年大龄程序员书单
  17. krait和kryo_高效的Java序列化(Kryo和FST)
  18. 解读老黄历--月日时令
  19. js正则表达式 part1 - Kaiqisan
  20. Ant 中的一些命令

热门文章

  1. JSP是什么?怎么使用?
  2. 仅需简单的文字描述,即可把文字转图片
  3. Uninstalling six-1.4.1:
  4. 计算机软件技术基础课程
  5. 【前端灵魂脚本语言JavaScript⑤】——JS中数组的使用
  6. Oracle 11g 停止正在运行的job
  7. Houdini粒子随机大小每帧变化问题
  8. 摘录魏国谋士轮胜败要素
  9. 微信公众号,主要分析哪些方面的数据?
  10. telegram机器人开发3-最简单的代码