详解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截取字符串的两种方法及区别详解
Nov 05 Javascript
jQuery子属性过滤选择器用法分析
Feb 10 Javascript
jQuery获取attr()与prop()属性值的方法及区别介绍
Jul 06 Javascript
详解Javascript几种跨域方式总结
Feb 27 Javascript
使用Bootstrap打造特色进度条效果
May 02 Javascript
ES6中字符串string常用的新增方法小结
Nov 07 Javascript
Angular 项目实现国际化的方法
Jan 08 Javascript
vue中使用sessionStorage记住密码功能
Jul 24 Javascript
原生js实现each方法实例代码详解
May 27 Javascript
layui表单验证select下拉框实现验证的方法
Sep 05 Javascript
Vue 一键清空表单的实现方法
Feb 07 Javascript
vue界面发送表情的实现代码
Sep 11 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
生成缩略图
2006/10/09 PHP
PHP4实际应用经验篇(2)
2006/10/09 PHP
15种PHP Encoder的比较
2007/03/06 PHP
PHP合并数组+与array_merge的区别分析
2010/08/01 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
PHP批量生成静态HTML的简单原理和方法
2014/04/20 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
2016/04/07 PHP
Nginx下ThinkPHP5的配置方法详解
2017/08/01 PHP
php7性能提升的原因详解
2019/10/13 PHP
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
javascript如何操作HTML下拉列表标签
2015/08/20 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
javascript html5 canvas实现可拖动省份的中国地图
2016/03/11 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
微信小程序 标签传入数据
2017/05/08 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
浅谈pyhton学习中出现的各种问题(新手必看)
2017/05/17 Python
Python机器学习之决策树算法实例详解
2017/12/06 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
对python读取zip压缩文件里面的csv数据实例详解
2019/02/08 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
python3将变量写入SQL语句的实现方式
2020/03/02 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
浅谈html5标签css3的常用样式
2016/10/20 HTML / CSS
舞蹈社团活动总结
2015/05/07 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书
详解Python魔法方法之描述符类
2021/05/26 Python