详解Angular路由 ng-route和ui-router的区别


Posted in Javascript onMay 22, 2017

什么是路由?

路由是AngularJS构建单页面应用的基础。

路由,就是网络数据或者请求进行分发的一个网络组件。

路由就是一个用于请求URL分发和跳转的一个应用组件,Angular中通过$routeProvider路由服务提供者进行核心的配置处理。

ng路由

ng 路由是 AngularJS 官方提供的一种简单的路由操作。

ng 路由主要分三个组成部分:路由指令、路由服务、路由服务提供者

路由指令:ng-view

ngView指令主要用于将路由指向的页面渲染到当前页面的布局中。

语法:

<ng-view [onload=”string”] [autoscroll]=”string”></ng-view>
  1. onload:当视图发生改变时执行属性值中的表达式
  2. autoscroll:当视图发生改变时自动触发$anchorScroll事件

事件:

路由视图一旦加载时,就会自动触发$viewContentLoaded 事件

路由提供者:$routeProvider

描述:

内置服务对象 内置服务对象 $routeProvider $routeProvider $routeProvider 主要用于进行路由配置 主要用于进行路由配置
该服务的使用必须依赖 该服务的使用必须依赖 该服务的使用必须依赖 ngRoute 模块,也就是项目中必须添加 模块,也就是项目中必须添加 animate-route.js

主要方法:

when( path, route); 用于在访问 path 路径时,跳转到 route 指定的视图
  |-- path:路由跳转的径
  |-- route:路由对象 <组件 对象 >,一个 JSON对象
 otherwise(params);用于在访问不存的路径时,跳转的默认路径或者视图
  |-- params:指定路径或者路由对象

内置服务<路由服务>:$route &$routeParams

$route 服务被用于进行深层超链接信息的描述, 它会监听 它会监听 $location.url() 地址并进行url 地址和指定的路由视图之间映射关系。

$routeParams服务允许开发人员可以进行路由中参数的处理。

ui路由

Angular官方提供的 ng 路由已经具备了非常强大的功能,但是在某些情况下存在一些不太好用的地方,项目中如果出现大量路由深层嵌套话官方的ng路由来处理就不是非常适合了。

第三方提供了一种强大的路由处理功能,对于路由嵌套也可以非常简单的进行处理。

ui-route:ui路由,第三方路由

ui路由,主要的功能是项目中的路由操作,和官方的ng路由相比较,它的处理方式更加简洁和易用,尤其是涉及到项目中大量路由嵌套时,使用ui路由能更加快捷方便的完成项目中路由的跳转处理。

ui-view:指令

ui -view是 ui 路由中模板页面用于数据展示的指令,可以作为标签的属性出现,同样也可以作为标签的属性出现

<div ui -viewviewviewview></div>>
<ui -view></uiview>

同时可以给 ui -view 指令命名,用于在路由跳转时对应名称的 ui -view 上展示对应的数据

总结:两者区别

① ng路由实现不了多页面应用

② ui路由:更加方便地处理路由嵌套,在state()函数中进行即可。

③ngRoute 和 ui-route 相比:

   $when —> $state      路由状态配置的时候          

   $routeParams —> $stateParams    带参数的时候的配置

   $routeProvider —> $stateProvider    依赖注入的模块

   <div ng-view></div>  —>  <div ui-view></div>   页面中绑定的指令

④ uiRoute中可以嵌套更深层次的路由,也就是路由中可以有路由(大致有两种情况:1.横向的 2.纵向的)。

(1)嵌套路由

(2)多视图路由

ngRoute中就不能嵌套更深的路由。

用代码看一下两者的区别:

ng路由:首先要配置注册 ngRoute 

代码如下:

var app = angular.module(“myApp", ['ngRoute']);        
 app.config(["$routeProvider",function($routeProvider){ 
}]);

ui路由:用hello world举例子:

<!DOCTYPE html> 
<html ng-app="myApp"> 
  <head> 
    <meta charset="UTF-8"> 
    <title>ui-route</title> 
    <script src="js/lib/angular.min.js" ></script> 
    <script src="js/lib/angular-ui-router.min.js"></script> 
  </head> 
  <style type="text/css"> 
    .active{ 
      color:red; 
      font-weight:bold; 
    } 
  </style> 
  <body> 
    <ul> 
      <li><a ui-sref="hello" ui-sref-active='active'>Hello</a></li> 
      <li><a ui-sref="world" ui-sref-active='active'>world</a></li> 
    </ul> 
    <div> 
      <ui-view></ui-view> 
    </div>   
  </body> 
  <script> 
    var app=angular.module("myApp",["ui.router"]); 
    /* 
     $stateProvider: Ui路由中的状态服务提供者 
    */ 
    app.config(["$stateProvider","$urlRouterProvider",function($stateProvider,$urlRouterProvider){ 
      $urlRouterProvider.otherwise("/hello"); 
       
      $stateProvider.state({ 
        name:"hello", 
        url:"/hello", 
        template:"<h1>这是hello对应的内容</h1>" 
      }).state({ 
        name:"world", 
        url:"/world", 
        template:"<h1>这是world跳转之后对应的内容</h1>" 
      }); 
    }]); 
 
  </script> 
</html>

效果如下:

详解Angular路由 ng-route和ui-router的区别

详解Angular路由 ng-route和ui-router的区别

这是简单的一个单页面跳转,有兴趣可以思考一下多页面应用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript学习(二)javascript常见问题总结
Jan 02 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
Dec 23 Javascript
原生JS实现美图瀑布流布局赏析
Sep 07 Javascript
jquery点击改变class并toggle的实现代码
May 15 Javascript
详解Angular开发中的登陆与身份验证
Jul 27 Javascript
微信公众号 客服接口的开发实例详解
Sep 28 Javascript
jstree的简单实例
Dec 01 Javascript
js简易版购物车功能
Jun 17 Javascript
vue中axios的封装问题(简易版拦截,get,post)
Jun 15 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
Aug 17 Javascript
js实现简单模态框实例
Nov 16 Javascript
VUE引入第三方js包及调用方法讲解
Mar 01 Javascript
Angular中$broadcast和$emit的使用方法详解
May 22 #Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
May 22 #Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
May 22 #Javascript
JS实现上传图片实时预览功能
May 22 #Javascript
详解Angular 4.x NgIf 的用法
May 22 #Javascript
JS实现无缝循环marquee滚动效果
May 22 #Javascript
jQuery表单验证之密码确认
May 22 #jQuery
You might like
ThinkPHP登录功能的实现方法
2014/08/20 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
php实现简单文件下载的方法
2015/01/30 PHP
php cookie工作原理与实例详解
2016/07/18 PHP
php实现产品加入购物车功能(1)
2020/07/23 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
多广告投放代码 推荐
2006/11/13 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
js判断IE浏览器版本过低示例代码
2013/11/22 Javascript
js select option对象小结
2013/12/20 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
解决jquery实现的radio重新选中的问题
2015/07/03 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
Vue学习之路之登录注册实例代码
2017/07/06 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
JS module的导出和导入的实现代码
2019/02/25 Javascript
Javascript执行流程细节原理解析
2020/05/14 Javascript
python3基于OpenCV实现证件照背景替换
2018/07/18 Python
对YOLOv3模型调用时候的python接口详解
2019/08/26 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
关于Python中定制类的比较运算实例
2019/12/19 Python
Python开发企业微信机器人每天定时发消息实例
2020/03/17 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
Python数据可视化图实现过程详解
2020/06/12 Python
DNA基因检测和分析:23andMe
2019/05/01 全球购物
小学三年级学生评语
2014/04/22 职场文书
婚礼答谢词
2015/01/04 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL