angularJs-服务调用与后台数据获取
可以用factory做一些后台数据的获取,例如
happyFarm.factory('seedList',['$http',function($http){
return {
getData: function(memberId) {
return $http.get(baseUrl+'/depotCtrl/getSeedList?memberId='+memberId);
}
}
}])
其中,“seedList”是模块名称,“$http”调用了angularJs内置的http服务(后续会谈到),getData是在该服务中自定义的一个方法,方法会返回一个从后台得到的数据,当控制器调用该服务时,可直接使用seedList.getData(memberId)获取数据。
这里,“seedList”可以看做一个自定义服务,而“$http”则是angularJs的内置服务。
- $http服务的两种用法
1.angularJs内置的$http服务,类似于jQuery的$ajax,用于向服务器请求/提交数据,例如
$http({
method :'POST',
url : 'http://localhost:8080/shopCtrl/buyCrop',
params: {
userId:'1',//memberId
cropId:$scope.cropDetail.cropId,
buyNum:$scope.cropDetail.quantity,
coin:$scope.cropDetail.totalCoin
}
}).success(function(data,status,headers,config) {
alert("success!")
}).error(function(data,status,headers,config){
alert(status)
});
2.angularJs中的$http服务还提供了一些快捷方法,例如上例中的:$http.get(baseUrl+'/depotCtrl/getSeedList?memberId='+memberId);
由于$http是异步处理,故采用这种方式来请求/提交数据,则在调用时需要用then()。
1.2、controller
controller是angularJs中负责处理业务,例如调用哪项服务,获取哪些数据,对数据进行操作等。
happyFarm.controller("bagController",["$scope","$http",'$routeParams','seedList',
function($scope,$http,$routeParams,seedList){
seedList.getData(1).then(function(res){ //memberId
$scope.bagItems=res.data
});
}]);
上文为controller.js中的一部分代码,bagController调用了seedList服务,并用该服务中的getData()方法从服务器后台获取数据,用then中的方法将数据res.data赋值给作用域中的bagitems集合,即可在模板页面用遍历bagItems的方式获取单个数据
需要注意的是,在调用服务时,应将angularJs内置服务写在前面,自定义服务(推荐自定义服务名称不要带$以区分)写在后面
在项目中,可能会遇到controller之间数据互相调用的情况,即controller间的通讯,可以使用一下几种方式:
1.父控制器的作用域包含子作用域的全部,故子控制器可以直接调用父控制器中的数据;2.作用域间的通讯可以通过service来完成,即,获取数据的操作另写一个服务,A,B控制器均可通过调用这个服务来完成数据的获取;
3.利用 $on, $emit,$broadcast在作用域之间进行交互(后续将补全)
1.3、模板
模板实际上是视图的一个组成部分,即可以是一个html片段。笔者当前项目中遇到两种不同的展现形式:
html中直接定义模块的controller,一般在最外层页面:
index.html:
<ul class="soil_main" ng-controller="cropListCotroller">
<li class="soil" ng-repeat="cropItem in cropItems" >
<div id="{{cropItem.soilId}}" ng-controller="interactController" ng-click="interact()">
<input id="soilId" type="hidden" value="{{cropItem.soilId}}">
</div>
</li>
</ul>a.在上文html片段中,用ng-controller定义了这个DOM节点将会被哪个controller控制;
b.ng-repeat会将cropItems集合中的每一个元素遍历,并向下复制“cropItems.length”个li标签用来展示cropItems数组中的每一个对象与路由绑定的模板
index.html:
<div ng-view></div>bag.html:
<p class="divs" ng-repeat="bagItem in bagItems">
<a class="divs_a" ng-click="chooseSeed(bagItem.cropId)">
<img src="{{bagItem.cropBasic.cropIcoSrc}}">
</a>
<i class="divs_num">{{bagItem.storeNumber}}</i>
</p>happyFarm.js:
$routeProvider.when('/bag',{
templateUrl: 'tmpl/bag.html',
controller: 'bagController'
}).otherwise({
redirectTo: '/'
})a.最外层页面有一个定义为ng-view的div元素,作为路由模板的容器;
b.用angular的$route服务来创建一个配置块(即happyFarm.js中的内容)承载需要的参数
c.当URL变成/bag时,angularJs将会加载tmpl下的bag.html到页面,同时,bag.html会从根元素开始被bagController管理。
参考书目 : 《用AngularJs开发下一代Web应用》
angularJs-服务调用与后台数据获取的更多相关文章
- 通过AngularJS实现前端与后台的数据对接(二)——服务(service,$http)篇
什么是服务? 服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通信,并且能保证数据的一致性. 服务是一个单例对象,在每个应用中只会被实例化一次(被$injector实例化) ...
- 前端MVC学习总结(三)——AngularJS服务、路由、内置API、jQueryLite
一.服务 AngularJS功能最基本的组件之一是服务(Service).服务为你的应用提供基于任务的功能.服务可以被视为重复使用的执行一个或多个相关任务的代码块. AngularJS服务是单例对象, ...
- 前端MVC学习笔记(三)——AngularJS服务、路由、内置API、jQueryLite
一.服务 AngularJS功能最基本的组件之一是服务(Service).服务为你的应用提供基于任务的功能.服务可以被视为重复使用的执行一个或多个相关任务的代码块. AngularJS服务是单例对象, ...
- AngularJs(Part 5)--与后台联系
AngularJS内置了$http这个服务来与后台联系.(默认会把接受到的数据转换为json)当然,还有一个$resource来提供与RESTful后台联系的服务. $http服务 $http比 ...
- 聊一聊 AngularJS 服务
什么是服务? 在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用. AngularJS 内建了30 多个服务. 为什么使用服务? 在很多服务中,比如 $loca ...
- Android(java)学习笔记228:服务(service)之绑定服务调用服务里面的方法
1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 : bindServ ...
- AngularJS 2调用.net core WebAPI的几个坑
前几天,按照AngularJS2的英雄指南教程走了一遍,教程网址是http://origin.angular.live/docs/ts/latest/tutorial/. 在步骤完成后,又更进一步,在 ...
- Freemarker商品详情页静态化服务调用处理
--------------------------------------------------------------------------------------------- [版权申明: ...
- 18_Android中Service的生命周期,远程服务,绑定远程服务,aidl服务调用,综合服务案例,编写一个应用程序调用远程支付宝远程服务场景
============================================================================ 服务的生命周期: 一.采用start的方式开始 ...
随机推荐
- Cisco Spectrum Expert(Wave2 AP)
在一些版本中,我们可能会发现,AP16,26或AP17,27,37等支持Spectrum Expert Connect (即SE-Connect),该模式可以让AP将频谱分析所述数据发送到对应的分析仪 ...
- mybatis源码探索笔记-3(使用代理mapper执行方法)
前言 前面两章我们构建了SqlSessionFactory,并通过SqlSessionFactory创建了我们需要的SqlSession,并通过这个SqlSession获取了我们需要的代理mapper ...
- 嵌入式实时程序设计中C/C++代码的优化
1 引言 计算机技术和信息技术的高速发展的今天,计算机和计算机技术大量应用在人们的日常生活中,嵌入式计算机也得到了广泛的应用.嵌入式计算机是指完成一种或多种特定功能的计算机系统,是软硬件的紧密结合体. ...
- 自定义Redis作为Session存储服务提供
之前看网上介绍可使用Redis自定义Session托管,使用第三方的Harbour.RedisSessionStateStore GitHub:https://github.com/TheCloudl ...
- springboot集成过滤器
封装自定义接口filter 包含两个方法,第一个过滤的路径数组,第二个为过滤器执行的顺序.spring boot 会按照order值的大小,从小到大的顺序来依次过滤. package com.thee ...
- Python实现一个LRU
class Node: key = None value = None pre = None next = None def __init__(self, key, value): self.key ...
- (踩过的坑)使用Github Page搭建个人博客
最近需要搭建一个网站,作为导航网址,但是自己的域名备案还要等上几天,就想着有没有别的办法来搭建一个公网可以访问的网站. Github Page的话是一个github个人主页,完全适合用来搭建普通网站. ...
- Maven笔记一
简介:什么是maven Maven是一个跨平台的项目管理工具,主要用于基于java平台的项目构建,依赖管理. 如图为项目构建的过程. 解决的项目的问题: 1. 如果有好几个项目,这好几个项目中,需要 ...
- jdk 档案库(包含历史版本)
http://java.sun.com/products/archive/ 参考:https://blog.csdn.net/shiluyong8068/article/details/7894747 ...
- 设计模式课程 设计模式精讲 11-2 装饰者模式coding
1 代码演练 1.1 代码演练1(未使用装饰者模式) 1.2 代码演练2(使用装饰者模式) 1 代码演练 1.1 代码演练1(未使用装饰者模式) 需求: 大妈下班卖煎饼,加一个鸡蛋加一元,一个火腿两元 ...