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 ...
随机推荐
- What are Traceroute, Ping, Telnet and Nslookup commands?
https://help.maximumasp.com/KB/a445/connectivity-testing-with-ping-telnet-tracert-and-pathping-.aspx ...
- 设计模式之——Chain of Responsibility
Chain of Responsibility模式又叫做责任链模式,是将多个对象组成一条职责链,然后按照职责链上的顺序一个一个的找出是谁来负责处理. 这个模式很简单,下面就是一个实例程序,有六个处理器 ...
- vue.js(四)
由于组件内容太多又特别关键,我决定在官网教程的基础上,加上自己的理解,针对每个内容详细记录一下 1.注册组件 ①全局注册 //首先创建组件 Vue.component('blog-post', { ...
- Cocos2d-x学习笔记(17)(TestCpp源代码分析-1)
TestCpp源代码基于Cocos2d-x2.1.3版本号,部分资源来自红孩儿的游戏编程之路CSDN博客地址http://blog.csdn.net/honghaier/article/details ...
- centos vim编辑器 第八节课
centos vim编辑器 第八节课 其他编辑器: nanogeditemacs 腾讯云上的vim版本~ VIM - Vi IMproved ~ ~ version 7.4.629 ~ by Br ...
- 江苏新美星智能物流无人叉车AGV
新美星一家全球领先的液体包装解决方案供应商,高附加值的产品应用于食品饮料等行业,为液体食品和自动化系统提供完整解决方案.新美星,于CBST2017展会首次亮相了能够从仓库或工厂的某个地方把材料.托盘和 ...
- 表单(上)EasyUI Form 表单、EasyUI Validatebox 验证框、EasyUI Combobox 组合框、EasyUI Combo 组合、EasyUI Combotree 组合树
EasyUI Form 表单 通过 $.fn.form.defaults 重写默认的 defaults. 表单(form)提供多种方法来执行带有表单字段的动作,比如 ajax 提交.加载.清除,等等. ...
- 有关Oracle统计信息的知识点
一.什么是统计信息 统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息.例如,表的行数,块数,平均每行的大小,索引的leaf blocks,索引字段的行数,不同值的大小等,都属于 ...
- (24)如何使用HttpClient
介绍 HttpClient是HTTP客户端的接口.HttpClient封装了各种对象,处理cookies,身份认证,连接管理等. 概念 HttpClient的使用一般包含下面6个步骤: 创建 Http ...
- 001-java虚拟机的概念
https://blog.csdn.net/yfqnihao/article/details/8289363 1.什么是java虚拟机.(你以为你知道,如果你看我下面的例子,你会发现你其实不知道) ( ...
script部分:
可以看出:给ui-view所在的标签一个name属性,由views选项控制所有的ui-view就可以实现一个页面多个视图。