AngularJS(十一)

昨天学到$http的快捷方式

<body ng-app="app">
		<div ng-controller="ctrl">
			<h3>请输入你的信息:</h3>
			<form id="userForm">
				用户名:<input type="text" name="user" ng-model="params.user" /><br />
				喜欢的图书:<select multiple="multiple" name="books" ng-model="params.books">
					<option value="java">疯狂</option>
					<option value="javaee">ddd</option>
					<option value="ajax">sdsd</option>
					<option value="xml">aaaa</option>
				</select><br />
				<input id="load" type="button" value="异步发送post" ng-click="send();" />
			</form><hr />
			<div ng-bind-html="show"></div>
		</div>
		<script>
			angular.module('app',['ngSanitize'])
			.config(function($httpProvider){
				$httpProvider.defaults.headers.post['Content-Type']='application/x-www-form-urlencoded';
			})
			.controller('ctrl',['$scope','$http','$httpParamSerializer',
			function($scope,$http,$httpParamSerializer){
				$scope.send =function(){
			       $http.post('pro',$httpParamSerializer($scope.params))
			.then(function successCallback(response){
				$scope.show = "服务器响应状态为:"+response.status+"<br />" +response.data;
			},function errorCallback(response){
				$scope.show = '服务异常';
			});
			};
			}]);
		</script>
	</body>

这个是发送post请求,大体和http请求差不多

多视图和路由
对于一个复杂的前端页面,设计者需要将页面分解与不同的视图模板中,而用户却感觉整个应用依然停留在一个页面内,这需要ng的多视图和路由支持来实现

ng路由允许开发者通过不同的URl访问不同的内容,从而实现多视图的单页web应用

$routeProvider配置路由规则
当用户使用ng应用的时候,路由可以让用户从一个视图导航到另一个视图

虽然现在网页可以实现单页面应用,也就是在一个页面完成各种功能的实现,不跳转,普通用户依然使用传统导航模式。
传统导航模式:
1.在地址栏输入URL,浏览器导航到相应页面
2.在页面中单击连接,,浏览器地址栏会发生改变,页面导航到另一个新页面
3.单击浏览器的前景和后退按钮,浏览器会向前或向后导航

AngularJS的路由借鉴了这个模型,他把浏览器中的url看做一个操作指南,即使在单页web中也可以使用url导航,甚至可以把参数传给支撑视图的相应组件,帮他们决定具体该展现哪些内容

开发者为页面中的链接绑定一个路由,但用户单击链接的时候,会被导航到应用中的相应视图。但用户单击按钮,从下拉框选取,或响应来自任何地方的事件时,都可以在代码控制下导航。路由器还在浏览器的历史日志中记录下这些活动,这样浏览器的前进和后退按钮也能照常工作

AngularJS使用$routeProvider服务配置,可通过多个when()和otherwise()方法进行配置,这些方法的语法格式如下:
when(path,route)--------当用户请求的url为path的时候,ng使用route路由进行处理
otherwise(route)---------当用户请求的url不匹配when()配置的path时,用otherwise处理

route参数是一个js对象,他支持下列属性
controller-该属性指定处理该路由的控制器参数,该属性的值既可以是函数名,也可以是直接定义的函数
controllerAs----该控制器指定一个别名,指定该属性后,该控制器会被添加到$scope中
template----该属性指定处理该路由的html模板字符串
templateUrl-------该属性指定处理该路由的html模板URL
resolve-----该属性指定一个JS对象,要包含key-value键对
resolveAs-----为resolve指定的对象指定一个别名,如果不指定别名,默认为$resolve
redirectTo-----将路由器重定向到摸个url,如果指定了该属性,前面的controller和template都不用了
reloadOnSerach-----是否只有当$location.search()和$loaction.hash()返回true时才会重新加载路由,默认true
caseInsensitiveMatch--------是否区分大小写,默认false

	<body ng-app="app">
		
		    <h2>AngularJS 路由应用</h2>
		    <ul>
		        <li><a href="#!/">首页</a></li>
		        <li><a href="#!/add">电脑</a></li>
		        <li><a href="#!/view">打印机</a></li>
		        <li><a href="#!/edit">其他</a></li>
		    </ul>
		     
		    <div ng-view></div>
		<script>
		angular.module('app',['ngRoute'])
		.config(['$routeProvider',function($routeProvider){
			$routeProvider
			.when('/',{
			//	controller:'ListController',
				template:'list.html'
			})
			.when('/add',{
		//		controller:'AddController',
				template:'add.html'
			})
			.when('/view',{
			//	controller:'DetailController',
				template:"detail.html"
			})
			.when('/edit',{
		//		controller:'EditController',
				template:'edit.html'
			})
			.otherwise({redirectTo:'/'});
		}
		]);
		</script>
	</body>

4个when()方法对模块进行配置了4个路由,这四个路由指定用户请求的字符串与控制器、html模板之间的对应关系

创建多视图
下面先为路由配置中的控制器提供函数,可通过调用angular.module中的controller()方法来添加控制器。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值