angularJs---route
route
route---‘路由’
ajax的弊端:
1.ajax请求不会留下history记录
2.用户无法直接通过url进入应用中的指定页面(保存书签,分享朋友?)
3.ajax不利于SEO
前端路由的实现原理是什么?
#哈希 也叫锚点,通过使用锚点实现页面刷新但不跳转。
html5中的history API
route可以说是angular的一大重点。 route可以实现局部页面无刷新跳转(相当于页面里嵌套了页面)
ng官方提供了一套路由 ng-route

1.引入外部文件:angular-route.js 2.把ngRoute模块注入到主模块 3.使用config函数 注入$routeProvider服务 4.在需要载入页面的地方 加上ng-view
$routeProvider的方法:
when(‘url’, {//code}) 该对象的属性有template/templateUrl--文件地址 controller:‘控制器名称’ url表示拼接在网址后头 #!url
otherwise({//code}) 该方法表示默认的页面 ,接收一个对象,该对象有个属性redirectTo 表示从重定向
需要注意的是:当设置了controller选项时,主控制器就不能用在 标签含有属性ng-view里面了。
<body ng-app="app">
<div ng-controller="myCtrl">
<a href="#!/index">index</a>
<a href="#!/home">home</a>
<div ng-view> </div>
</div>
</body>
<script src="./js/angular.js"></script>
<script src="./js/angular-route.js"></script>
<script>
var app = angular.module('app', ['ngRoute']);
app.controller('myCtrl', function($scope){
$scope.name = 'dk';
})
app.config(function($routeProvider){
$routeProvider.when('/index',{
templateUrl:'./temp/index.html',
controller: 'indexCtrl'
}).when('/home', {
templateUrl: './temp/home.html'
}).otherwise('/index', {
templateUrl:'./temp/index.html',
controller: 'indexCtrl'
})
});
app.controller('indexCtrl', function($scope){
$scope.name = 'jjk'
})
</script>
在chrome中显示:

从外部引入angular-route.js 但无法进行深层次嵌套,这时,可以选用第3方插件:angular-ui-route.js
用ng制作的spa(单页面应用)经常有路由嵌套、路由平行的情况
第一种情况:页面嵌套

<body ng-app="app">
<div ng-controller="myCtrl">
<a href="#!/index">index</a>
<div ui-view style="border:1px solid green"> </div>
</div>
</body>
<script src="./js/angular.js"></script>
<script src="./js/angular-ui-router.js"></script>
<script>
var app = angular.module('app', ['ui.router']);
app.controller('myCtrl', function($scope){
$scope.name = 'dk';
})
app.config(function($stateProvider, $urlRouterProvider)
{
$urlRouterProvider.when('', '/index');
$stateProvider.state('index', {
url:'/index',
templateUrl:'./temp/index.html'
// controller: 'indexCtrl'
})
.state('index.page1',{
url: '/page1',
templateUrl: './temp/page1.html' })
.state('index.page2',{
url:'/page2',
templateUrl:'./temp/page2.html'
})
})
</script>
上面的代码中:
$urlRouterProvider.when('', '/index'); 表示默认页面
url 表示在当前网址的基础上加上url
同样可以有controller选项。
在chrome中显示:

第2种情况:多个ui-view存在同一个页面,互为平行关系。
body部分:script部分:
可以看出:给ui-view所在的标签一个name属性,由views选项控制所有的ui-view就可以实现一个页面多个视图。
<body>
<a href="#!/index">index</a>
<a href="#!/home">home</a>
<div ui-view name='view1'> </div>
<div ui-view name='view2'> </div>
<div>
<div ui-view name='view3' style="border:1px solid red"> </div>
</div> </body>
<script src="./js/angular.js"></script>
<script src="./js/angular-ui-router.js"></script>
<script>
var app = angular.module('demo', ['ui.router']);
app.config(function ($stateProvider, $urlRouterProvider) {
$stateProvider.state('index', {
url: '/index',
views: {
"view1": {
template: '<p>index first</p>'
},
"view2": {
template: '<p>index second</p>'
},
"view3":{
template:"<p>three</p>"
}
}
})
.state('home', {
url: '/home',
views: {
"view1": {
template: '<p>home first</p>'
},
"view2": {
template: '<p>home second</p>'
}
}
})
})
</script> </html>
在chrome中显示:

路由传参:在我们平时做的页面跳转都会传参,如:https://i.cnblogs.com/EditPosts.aspx?postid=6556246&update=1, postid=6556246&update=1就是参数。那路由又是如何实现传参的呢?
在url选项中: ‘/index/:id’ id即为参数 如果设置了参数 凡是页面/index/hot、/index/news之类的 hot news均表示参数而不是指第2层ui-view。
一般在a标签里 实现路由跳转 有2种写法:
1. <a href="#/index/hot"></a> hot为参数
2. 使用ui-sref
<a ui-sref="index({id:hot})">show index</a> index表示 路由的名字 ({id:hot})表示参数
监控路由的变化:
监控路由的变化有一般有2种方式
1. 路由状态发生改变时,可以通过监听' $stateChangeStart '、' $stateChangeSuccess '、' $stateChangeError '等事件
监控路由是在run阶段,通过注入$rootScope服务,使用$on监听这些事件。
$stateChangeStart 表示 路由状态开始改变 注意此时url还未改变了,视图还未更新。
$stateChangeSuccess表示 路由状态改变完成,此时url已经改变了,视图仍没有更新。
$stateChangeError 表示 路由状态改变错误。
var app = angular.module('app', ['ui.router', 'routers', 'directives', 'controllers', 'ionic']);
// app.controller('appCtrl',function($scope){
// $scope.tab = 'jjk';
// })
监听路由变化
app.run(['$rootScope', '$http', function ($rootScope,$http) {
$rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {
console.log(event);
console.log(toState);
console.log(toParams);
console.log(fromState);
console.log(fromParams);
console.log($rootScope.tab);
if (toState.name = 'home.list') {
$http({
url: "https://cnodejs.org/api/v1/topics",
method: 'GET',
params: {
limit: 10,
page: 1,
tab: toParams.id
}
}).then(function (res) {
// console.log(res.data);
if (res.data.success) {
$rootScope.news = res.data.data;
console.log($rootScope.news);
}
})
}
}
)
}])
注入$rootScope服务,监听$stateChangeSuccess
$rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams){//code}
请使用手机"扫一扫"x
angularJs---route的更多相关文章
- Part 39 AngularJS route change events
In this video we will discuss1. Different events that are triggered when a route change occurs in an ...
- part 36 AngularJS route reload
In this video we will discuss angular route service reload() method. This method is useful when you ...
- [译]用AngularJS构建大型ASP.NET单页应用(一)
原文地址:http://www.codeproject.com/Articles/808213/Developing-a-Large-Scale-Application-with-a-Single 渣 ...
- AngularJS 基础
1. AngularJs 是一个JS 框架,是一种基于MVC的设计模式 2. script 需引用 <script src="angular.min.js">,安装包 ...
- AngularJS with MVC4 CRUD
CRUD using MVC Web API and AngularJS In this article I am going to demonstrate about how can we crea ...
- Visual Studio 2015 Owin+MVC+WebAPI+ODataV4+EntityFrawork+Identity+Oauth2.0+AngularJS 1.x 学习笔记之"坑"
1.AngularJS route 与 MVC route http://www.cnblogs.com/usea/p/4211989.html public class SingleRoute : ...
- 【MVC5】First AngularJS
※本文参照<ASP.NET MVC 5高级编程(第5版)> 1.创建Web工程 1-1.选择ASP.NET Web Application→Web API 工程名为[atTheMovie] ...
- Part 30 AngularJS routeparams example
Here is what we want to do : When we navigate to /students, the list of student names must be displa ...
- vue-router 的URL路径中#的意义
传送门 https://router.vuejs.org/zh-c... Router 构造配置 routes 类型: Array<RouteConfig> RouteConfig 的类型 ...
- Part 23 to 26 Routing in Angular
Part 23 AngularJS routing tutorial In general, as the application becomes complex you will have more ...
随机推荐
- a Javascript library for training Deep Learning models
w强化算法和数学,来迎接机器学习.神经网络. http://cs.stanford.edu/people/karpathy/convnetjs/ ConvNetJS is a Javascript l ...
- Andrew Ng机器学习公开课笔记 -- 朴素贝叶斯算法
网易公开课,第5,6课 notes,http://cs229.stanford.edu/notes/cs229-notes2.pdf 前面讨论了高斯判别分析,是一种生成学习算法,其中x是连续值 这里要 ...
- Wireshark分析之TCP协议(二)
(1)TCP首部格式 源端口: 用来传输数据报的端口 目标端口: 数据包将要发送到的端口 序号: 用来表示一个TCP片段.这个值用来表示数据流中的部分数据没有丢失 确认号: 表示通信中希望从另一 ...
- PHP关于函数的参数问题
可能是自己以前写程序太规范了,今天发现个PHP函数参数个数的问题,定义的函数有三个参数,但是使用函数的时候竟然传了四个参数,更意外的是程序运行没有错误,甚至没有警告.于是依靠搜索引擎和PHP文档仔细查 ...
- Monkey Tradition---LightOj1319(中国剩余定理模板)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1319 题意:有 n 个猴子,n 棵树,树的高度为 L ,每个猴子刚开始的时候都在树的底 ...
- mysql 表的增删改查 修改表结构
四.修改表结构 语法: . 修改表名 ALTER TABLE 表名 RENAME 新表名; . 增加字段 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…], ADD 字段名 ...
- django高级之点赞、文章评论及上传文件
目录: 点赞 文章评论 上传文件 保留页面条件 一.点赞 1.所用技术: django model F查询 js应用:$(function () {}); 为文件加载完成执行ready() 方法.等同 ...
- iis6下配置支持.net4.0&发布网站[转]
iis6配置支持.net4.0 在win2003操作系统上发布两个网站,首先配置iis: 1.下载 .net framework 4.0 差不多48MB 2.安装 3.打开iis: 开始=> ...
- cocos代码研究(20)Widget子类LoadingBar学习笔记
理论基础 在一些操作中可视化指示进度条.显示给用户一个条表示操作已经完成了多少,继承自 Widget. 代码实践 static LoadingBar * create ()创建一个空的LoadingB ...
- 1:1 Struts2概述
jar包下载
script部分:
可以看出:给ui-view所在的标签一个name属性,由views选项控制所有的ui-view就可以实现一个页面多个视图。