详解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 相关文章推荐
js类中获取外部函数名的方法
Aug 19 Javascript
不能再简单的无闪刷新验证码原理很简单
Nov 05 Javascript
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
Oct 25 Javascript
Javascript判断对象是否相等实现代码
Mar 18 Javascript
replace()方法查找字符使用示例
Oct 28 Javascript
JQuery右键菜单插件ContextMenu使用指南
Dec 19 Javascript
js中跨域方法原理详解
Jul 19 Javascript
基于JavaScript的操作系统你听说过吗?
Jan 28 Javascript
基于jQuery实现表格的排序
Dec 02 Javascript
详解webpack3编译兼容IE8的正确姿势
Dec 21 Javascript
vue2.0 资源文件assets和static的区别详解
Apr 08 Javascript
详解vue引入子组件方法
Feb 12 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
php-accelerator网站加速PHP缓冲的方法
2008/07/30 PHP
回帖脱衣服的图片实现代码
2014/02/15 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
javascript 学习之旅 (1)
2009/02/05 Javascript
javascript 多浏览器 事件大全
2010/03/23 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
JavaScript实现五子棋小游戏
2020/10/26 Javascript
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python使用自定义user-agent抓取网页的方法
2015/04/15 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
Numpy 中的矩阵求逆实例
2019/08/26 Python
python提取xml里面的链接源码详解
2019/10/15 Python
Python获取excel内容及相关操作代码实例
2020/08/10 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
Priority Pass机场贵宾室会籍计划:全球超过1200间机场贵宾室
2018/08/26 全球购物
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
珍珠鸟教学反思
2014/02/01 职场文书
环保标语大全
2014/06/12 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
检查机关领导群众路线教育实践活动个人整改措施
2014/10/28 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
西双版纳导游词
2015/02/03 职场文书
保护环境建议书作文300字
2015/09/14 职场文书
优秀团员主要事迹范文
2015/11/05 职场文书
2019年妇科护士的自我鉴定(3篇)
2019/09/26 职场文书
浅谈:电影《孔子》观后感(范文)
2019/10/14 职场文书
python内置进制转换函数的操作
2021/06/02 Python
Mac电脑OS系统下安装Nginx的详细教程
2022/04/14 Servers