angular.js之ui.router篇

AngularJS 路由可以通过不同的 URL 访问不同的内容,实现多视图页面的跳转。

在使用ui-router路由之前一定要先载入下面两个文件

 <script type="text/javascript" src="angular-ui-router.min.js"></script>
 <script type="text/javascript" src="jquery.min.js"></script>

1,路由使用分析,默认路由和路由规则

var m=angular.module('la',['ui.router']);//定义模块时依赖注入ui.router模块
	m.config(['$stateProvider','$urlRouterProvider',function($stateProvider,$urlRouterProvider){//注入两个路由服务
		//默认路由
		$urlRouterProvider.otherwise('/my');
		//路由规则
		$stateProvider.state('default',{	//default为路由规则名,ui-sref=""中用路由规则名,href中用路由地址
			url:'/my',			//路由的地址
			template:'<h1>这个美丽的世界</h1>'	//此路由下的内容,这里也可以用templateUrl载入一个内容文件
		}).state('home',{
			url:'/home',
			template:'<h1>首页</h1>'
		}).state('second',{
			url:'/second',
			tempalte:'<h1>第二页</h1>'
		}).state('three',{
			url:'/three',
			template:'<h1>第三页</h1>'
		});
	}]);

html部分

<div ng-view>您访问的页面不存在!</div>			<!--加载默认的路由,当找不到默认路由的时候显示里面的内容-->
<ul>
    <li><a href="" ui-sref="home">首页</a></li>		<!--当点击这个链接的时候便会跳转到指定路由地址显示其内容-->
    <li><a href="" ui-sref="second">第二页</a></li>
    <li><a href="" ui-sref="three">第三页</a></li> 
</ul>


2.路由中使用控制器的两种方式

    1)直接在路由规则中定义控制器模块

	var m=angular.module('la',['ui.router']);
	m.config(['$stateProvider','$urlRouterProvider',function($stateProvider,$ulrRouterProvider){
		//默认路由
		$urlRouterProvider.otherwise('');
		//路由规则
		$stateProvider.state('default',{
			url:'',
			templateUrl:'1.html',
			controller:['$scope',function($scope){	//路由中定义控制器
				$scope.name='张三';
			}],
		});
	}]);
      1.html部分
	<div>
		我的名字是:{{name}}
	</div>
      2)外部定义控制器,路由规则中调用
	var m=angular.module('la',['ui.router']);
	m.config(['$stateProvider','$urlRouterProvider',function($stateProvider,$ulrRouterProvider){
		//默认路由
		$urlRouterProvider.otherwise('');
		//路由规则
		$stateProvider.state('default',{
			url:'',
			templateUrl:'1.html',
			controller:'ctrl',		//调用外部定义的控制器
		});
	}]);
	m.controller('ctrl',['$scope',function(){
		$scope.name="张三";
	}]);


3.$state服务ui路由控制器中执行路由跳转 

	var m=angular.module('la',['ui.router']);
	m.config(['$stateProvider','$urlRouterProvider',function($stateProvider,$urlRouterProvider){
		//默认路由
		$urlRouterProvider.otherwise('/home');
		//路由规则
		$stateProvider.state('home',{
			url:'/home',
			templateUrl:'1.html',
		}).state('game',{
			url:'/game',
			template:'<h1>游戏</h1>'
		});
	m.controller('ctrl',['$scope','$state',function($scope,$state){
		$scope.go=function(url){
			$state.go(url);		//在页面点击链接时执行此函数实现传入参数的跳转
		}
	}]);
   html部分
   <div ng-view></div>
   <li>
	<a href="" ng-click="go('/game')">跳转</a>
   </li> 



4.路由参数的设置和$stateParams服务接收参数

	var m=angular.module('la',['ui.router']);
	m.config(['$stateProvider','$urlRouterProvider',function($stateProvider,$ulrRouterProvider){
		//默认路由
		$urlRouterProvider.otherwise('/home');
		//路由规则
		$stateProvider.state('home',{
			url:'/home',
			templateUrl:'1.html',
			controller:'ctrl',
		}).state('user',{
			url:'/user/{id}',		//在链接中传递参数
			template:'<h1>用户详情{{user.name}}</h1>',
			controler:'ctrl',
		});
	}]);
	m.controller('ctrl',['$scope','$stateParams',function($scope,$stateParams){
		$scope.user=[
			{id:1,name:'张三'},
			{id:2,name:'李四'}
		];
		
		id=$stateParams.id; 			//控制器中通过此服务获取参数
		
		if(id){					//只有在页面中点击a标签之后跳转路由才有此参数
			for(var i=0;i<$scope.user.length;i++){
				if(id==$scope.user[i].id){
					$scope.user=$scope.user[i];
				}
			}
		}
	}]);
    1.html部分,
	<li ng-repeat="v in user">  			
		<a href="" ui-sref="user({id:v.id})">{{v.name}}</a>
	</li>
	//遍历控制器中的数据,每一个超链接标签内容为数据名,当点击之后跳转到第二个路由,并且传递参数,在路由名之后带括号传递参数


5.uiRouter路由定义高效的父子级嵌套路由,嵌套跳转到子级路由时父级路由内容不消失
 两种方法:第一种在定义路由名时指明是父级路由名下的路由,第二种是在state属性对象里面指明其父级路由

	var m=angular.module('la',['ui.router']);
	m.config(['$stateProvider','$urlRouterProvider',function($stateProvider,$urlRouterProvider){
		//默认路由
		$urlRouterProvider.otherwise('/home');
		//路由规则
		$stateProvider.state('home',{
			url:'/home',
			templateUrl:'1.html',
		}).state('home.news',{			//定义路由规则名时指明其父级路由
			url:'news',
			template:'<h1>新闻</h1>',
		}).state('game',{
			url:'/game',
			parent:'home',			//属性里面指明其父级路由
			template:'<h1>游戏</h1>'
		}).state('login',{
			url:'/login',
			template:'<h1>登录</h1>'
		});
	}])
    1.html是其默认加载的父级路由内容,在父级路由内容中必须指明加载子级路由的地方
	<div ng-view></div>

6.通过view属性定义超灵活的嵌套路由,
	var m=angular.modlue('la',['ui.router']);
	m.config(['$stateProvider','$urlRouterProvider',function($stateProvider,$urlRouterProvider){
		//默认路由
		$urlRouterProvider.otherwise('/my');
		//路由规则
		$stateProvuder.state('my'{
			url:'/my',
			views:{			//view可以定义多个视图内容,在html的不同区块中加载
				top:{
					templateUrl:'view/top.html',
				},
				left:{
					templateUrl:'view/my.html',
				},
				right:{
					templateUrl:'view/about.html'
				}
			}
		}).state('video',{
			views:{
				top:{
					templateUrl:'view/top.html',
				},
				left:{
					templateUrl:'view/video.html',
				},
				right:{
					templateUrl:'view/about.html',
				}
			}
		});
	}]);
      html部分
        <div ng-app="la">
		<div ng-view="top"></div>	<!--加载默认路由中的view下的top内容-->
		<div ng-view="left"></div>
		<div ng-view="right"></div>	
	</div>
         top.html示例
	<a href="" ui-sref="my">我的</a>
	<a href="" ui-sref="video">视频</a>	<!--点击视频时会跳转到第二个video路由规则-->
         my.html
	<a href="">我的姓名</a>
	<a href="">用户信息</a>
         about.html
	<a href="">关于</a>
	<a href="">帮助</a>

7.ui.router路由view下的父子级嵌套
	var m=angular.module('la',['ui.router']);
	m.config(['$stateProvider','$urlRouterProvider',function($stateProvider,$urlRouterProvider){
		//默认路由
		$urlRouterProvider.otherwise('/my');
		//路由规则
		$stateProvider.state('my',{
			url:'/my',
			view:{
				'@':{
					templateUrl:'video/my.html',
				},
				'content':{
					template:'欢迎来到此'
				}
			}.state('my.video',{
				url:'/video',
				view:{
					'son@my':{
						templateUrl:'view/video.html',
					},
					'content@':{
						template:'',
					}
				}
			})
		})
	}])


注:当为指明具体的html部分时直接加载默认的路由即可微笑




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值