AngularJs 路由

router路由
	router路由是angularJs用于构建单页面应用的模块
	本质是从a标签点击跳转功能延展而来的
	
	**功能:主要实现一个页面的模块点击加载不同应用,如微信的底部导航栏上的页面,根据
	低部的点击,加载不同功能页面;如果qq,根据下面的导航,点击后上面的模块加载不同功能**

	(1)router功能的实现需要引入,angular.route.min.js
	(2)router功能的实现需要以来ng-view指令
		1、提供标注,放在哪哪个标签就作为容器,盛放不同页面的内容
	(3)router功能的实现需要a标签的href属性
		1、href='#/要加载的路由路径'
		2、使得a标签点击时,通知路由加载哪一个页面
	(4)具体语法通过app页面数据模型创建的
		1、通过config方法构建一个路由
		2、在路由中,通过.when()来准备加载要加载的页面
		3、在路由种,通过.otherwise()来决定加载哪一个页面
			
			app模型.config(['$routeProvider',function($routeProvider){
				$routeProvider
				//页面准备加载
				.when('/页面代号即a标签的href#后的内容',{
					templateUrl:'要加载页面的url地址(以路由所在的位置为起点)',
					controller:'当前页面对应要加载的脚本即控制器名称'
					//若需要延迟加载
					resolve:{
							delay:function($q){
								//$q表示promise对象
								var delay=$q.defer();
								//用定时器模拟网络请求延迟,实际放置ajax请求
								setTimeout(function(){
									delay.resolve() //执行
								},3000);
								//return出去才能让系统知道什么时候完事
								return delay.promise
							}
						}
				}).when(...)
				.otherwise({
				//默认加载的页面代号
					redirectTo:'/页面代号即a标签#后的href内容'
				})
			}])

	注意:
		(1)如果使用路由功能,在创建页面数据模型app的时候,必须要注入一条名为ngRoute的信息,相当于对当前页面声明要使用路由声明	
			var app=angular.module('app',['ngRoute'])
		(2)在承载不同页面的容器上记得不要忘记加载ng-view,否则路由选中的页面无法加载
		(3)模板的三种写法
			template:'xx'
			templateUrl:'html文件路径'
			templateUrl:'script标签的id值'
				(1)在body里声明<script type='text/ng-template' id='xx'>
										html模板内容
							  </script>
		(4)templateUrl传入的模板中,除了定义html内容外,还可定义css
			<style>
				...
			</style>
			html内容
	
	(5)路由传参
		在路由路径后添加"?键值对"
		在路由对应的controller中
			(1)注入$routeParams
			(2)$routeParams.键名调用传入参数
			
	(5)路由事件
		(1)在范围包含所有路由的控制器中使用
		//在切换路由前执行
			$scope.$on('$routeChangeStart',function(){...})
		//在切换路由后执行
			$scope.$on('$routeChangeSuccess',function(){...})
		//路由切换失败执行
			$scope.$on('$routeChangeError',function(){...})

代码示例:

<!DOCTYPE html>
<html ng-app='app' ng-controller='mainController'>
<head lang="en">
	<meta charset='utf-8'/>
	<title ng-bind='mainTitle'></title>
</head>
<body>

<!-- <ul ng-controller='showNameController'>
	<li ng-repeat='pname in pnames track by $index'>{{pname}}</li>
</ul> -->

<!-- <div ng-controller='showInfoController'>
	<div ng-repeat='info in infos track by $index'>
		<h2>{{info.username}}</h2>
		<p>{{info.password}}</p>
	</div>
</div> -->

<ul>
	<li><a href="#showname">姓名列表显示</a></li>
	<li><a href="#showinfo">信息列表显示</a></li>
</ul>
<div style="width:300px; height:300px; border:1px solid black;" ng-view></div>

<script src="js/angular.js"></script>
<script src="js/angular.route.min.js"></script>
<script>

	//路由文件
	var app = angular.module('app', ['ngRoute']);
	app.config(['$routeProvider', function ($routeProvider){
		$routeProvider
			.when('/showname', {
				//因为表示要加载的内容,所以只需要写需要加载的标签内容,不需要写html结构
				templateUrl:'showname.html',
				controller:'showNameController'
			})
			.when('/showinfo', {
				templateUrl: 'showinfo.html',
				controller:'showInfoController'
			})
			.otherwise({
				//会默认加载到ng-view中
				redirectTo:'/showname'
			});
	}]);



	app.controller('mainController', ['$scope', function ($scope){
		$scope.mainTitle = 'lesson1_路由router';
	}]);
	app.controller('showNameController', ['$scope', function ($scope){
		$scope.pnames = ['frank','lily','lucy'];
	}]);
	app.controller('showInfoController', ['$scope', function ($scope){
		$scope.infos = [
			{ username:'frank', password:'123456' },
			{ username:'zoe', password:'654321' }
		];
	}]);
</script>
</body>
</html>

showname.html:

<li ng-repeat='pname in pnames track by $index'>{{pname}}</li>

showinfo.html:

<div ng-repeat='info in infos track by $index'>
			<h2>{{info.username}}</h2>
			<p>{{info.password}}</p>
</div>


代码示例2:
主html页面:

<html ng-app="app" ng-controller="main">
<head>
	<meta charset="utf-8">
	<title ></title>
	
	<script src="js/libs/angular.js"></script>
	<script src="js/libs/angular.route.min.js"></script>
	<script src='./angular/user.js'></script>
	<script src='./angular/article.js'></script>
	<script src='./angular/config.js'></script>
 <style>
	.a{
		color:red;
	}
 </style>
	
</head>
<body ng-controller='con'>

	<span ng-show='loading'>正在加载</span>
	<a href="#/user?name=jeff">用户1</a>
	<a href="#/user?name=tom">用户2</a>
	<a href="#/user?name=hack">用户3</a>
	<a href="#/article">文章</a>
	<a href="#/config">配置</a>

<ng-view></ng-view>	

<script type='text/ng-template' id='config.html'>
	<div>
		<h2>配置中心</h2>
		<ul>
			<li>用户名:{{name}}1</li>
			<li>年龄:{{age}}</li>
		</ul>

	</div>
</script>


<script>
//因为用app这个模块配置含有其他模块的内容,所以其他模块需要注入
var app=angular.module('app',['ngRoute','usermod','articlemod','configmod']);

app.config(['$routeProvider',function($routeProvider){
		$routeProvider
		.when('/user',{
			templateUrl:'./angular/user.html',
			controller:'userCon',
			resolve:{
				delay:function($q){
					//$q表示promise对象
					var delay=$q.defer();
					//用定时器模拟网络请求延迟,实际放置ajax请求
					setTimeout(function(){
						delay.resolve() //执行
					},3000);
					//return出去才能让系统知道什么时候完事
					return delay.promise
				}
			}

		})
		.when('/article',{
			templateUrl:'./angular/article.html',
			controller:'artCon'

		})
		.when("/config",{
			templateUrl:'config.html',
			controller:'figCon'
		})

}])

app.controller('main',['$scope',function($scope){

}])

app.controller('con',['$scope',function($scope){
		$scope.loading=false;
	//在切换路由前执行
		$scope.$on('$routeChangeStart',function(){
				alert('开始');
				$scope.loading=true;
		})
	//在切换路由后执行
		$scope.$on('$routeChangeSuccess',function(){
				alert('成功切换');
				$scope.loading=false;
		})
	//路由切换失败执行
		$scope.$on('$routeChangeError',function(){
				alert('切换失败');
		})
}])




</script>

</body>
</html>

控制器js:

var app=angular.module('articlemod',[])

app.controller('artCon',['$scope',function($scope){

		$scope.name='jack';
		$scope.age=16;

}])

模板html:

<div>
	<h2>文章中心</h2>
	<ul>
		<li>用户名:{{name}}</li>
		<li>年龄:{{age}}</li>
	</ul>

</div>

传参的控制器js:

var app=angular.module('usermod',[])

app.controller('userCon',['$scope','$routeParams',function($scope,$routeParams){

		$scope.name='jeff22';
		$scope.age=17;

		console.log($routeParams)
}])
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值