可以用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-服务调用与后台数据获取的更多相关文章

  1. 通过AngularJS实现前端与后台的数据对接(二)——服务(service,$http)篇

    什么是服务? 服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通信,并且能保证数据的一致性. 服务是一个单例对象,在每个应用中只会被实例化一次(被$injector实例化) ...

  2. 前端MVC学习总结(三)——AngularJS服务、路由、内置API、jQueryLite

    一.服务 AngularJS功能最基本的组件之一是服务(Service).服务为你的应用提供基于任务的功能.服务可以被视为重复使用的执行一个或多个相关任务的代码块. AngularJS服务是单例对象, ...

  3. 前端MVC学习笔记(三)——AngularJS服务、路由、内置API、jQueryLite

    一.服务 AngularJS功能最基本的组件之一是服务(Service).服务为你的应用提供基于任务的功能.服务可以被视为重复使用的执行一个或多个相关任务的代码块. AngularJS服务是单例对象, ...

  4. AngularJs(Part 5)--与后台联系

    AngularJS内置了$http这个服务来与后台联系.(默认会把接受到的数据转换为json)当然,还有一个$resource来提供与RESTful后台联系的服务. $http服务    $http比 ...

  5. 聊一聊 AngularJS 服务

    什么是服务? 在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用. AngularJS 内建了30 多个服务. 为什么使用服务? 在很多服务中,比如 $loca ...

  6. Android(java)学习笔记228:服务(service)之绑定服务调用服务里面的方法

    1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 :                     bindServ ...

  7. AngularJS 2调用.net core WebAPI的几个坑

    前几天,按照AngularJS2的英雄指南教程走了一遍,教程网址是http://origin.angular.live/docs/ts/latest/tutorial/. 在步骤完成后,又更进一步,在 ...

  8. Freemarker商品详情页静态化服务调用处理

    --------------------------------------------------------------------------------------------- [版权申明: ...

  9. 18_Android中Service的生命周期,远程服务,绑定远程服务,aidl服务调用,综合服务案例,编写一个应用程序调用远程支付宝远程服务场景

    ============================================================================ 服务的生命周期: 一.采用start的方式开始 ...

随机推荐

  1. iOS 开发之 23种设计模式

    整理了 iOS 开发中用到的设计模式: iOS 开发之 设计模式[一]原型模式 (Prototype pattern) iOS 开发之 设计模式[二]工厂方法模式 iOS 开发之 设计模式[三]抽象工 ...

  2. Shell函数!

    1.作用:将命令序列按格式写在一起,可方便重复使用命令序列2.Shell 函数定义格式:[ function ] 函数名(){命令序列[ return x ]}3.调用函数的方法:函数名 [ 参数 1 ...

  3. rem布局,在用户调整手机字体大小/用户调整浏览器字体大小后,布局错乱问题

    一.用户调整浏览器字体大小,影响的是从浏览器打开的web页. 浏览器设置字体大小,影响浏览器打开的页面.通过js可控制用户修改字体大小,使页面不受影响. (function(doc, win) { / ...

  4. 【摘录自MDN】预定义函数

    JavaScript语言有好些个顶级的内建函数: eval() eval()方法会对一串字符串形式的JavaScript代码字符求值. uneval()  uneval()方法创建的一个Object的 ...

  5. CSS - 背景半透明

    就一句话 background: rgba(0, 0, 0, .2); body { background-color: pink; } div { width: 200px; height: 200 ...

  6. nginx 加工上游服务器返回的内容,并返回给客户端

    禁用上游响应头部功能 Syntax: proxy_ignore_headers field ...; Default: — Context: http, server, location 功能介绍:某 ...

  7. GO常量/枚举

    常量中的数据类型只可以是布尔型.数字型(整数型.浮点型和复数)和字符串型. 常量的定义格式: const identifier [type] = value 你可以省略类型说明符 [type],因为编 ...

  8. Spring Cloud 从入门到入门

    参考:https://blog.csdn.net/hellozpc/article/details/83692496 参考:https://www.fangzhipeng.com/spring-clo ...

  9. LeetCode 876. Middle of the Linked List(获得链表中心结点)

    题意:获得链表中心结点.当有两个中心结点时,返回第二个. 分析:快慢指针. /** * Definition for singly-linked list. * struct ListNode { * ...

  10. hexo 安装和部署

    因为投递论文需要个人网站,所以今天又来了一次hexo 安装和部署. 参考官方文档:https://hexo.io/zh-cn/docs/ git是需要的哈.自行安装 node需要大于8.10 node ...