可以用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. Java 获取年份的第一天或最后一天 工具类

    package com.taiping.test; import java.text.SimpleDateFormat; import java.util.Calendar; import java. ...

  2. express 应用创建及app.js详解

    #1 express 应用创建 1.安装node.js (自行百度) 2.npm install express -g 3.全局安装express生成器 express-generator npm i ...

  3. nginx反向代理实战之轮询、Ip_hash、权重

    实验环境 192.168.200.111 web1 centos7 192.168.200.112 web2 centos7 192.168.200.113 wev3 centos7 三台主机环境: ...

  4. Monty Hall Problem (三门问题)

    最近有点忙,没怎么写程序...今天突然想起以前看到过的一个问题-三门问题,十分想用程序来模拟一下,于是实在忍不住了就模拟了这个游戏的实验,通过写程序更加加深了我对这个问题的理解,期间也查找了各种相关资 ...

  5. Ajax记载html

  6. ios中使用socket实现聊天

    [iOS]SocketRocket简单实现聊天室功能 https://www.jianshu.com/p/db34940f1135      CocoaAsyncSocket   https://gi ...

  7. URL和 URI 的区别

    URL:统一资源定位符 URI:统一资源标识符 URL 是 URI 的一个子集: 来源知乎 1.统一资源标识符 URI 就是在某一规则下能把一个资源独一无二的表示出来. 拿人做例子,假设这个世界上多有 ...

  8. ls命令与cd命令

    ls命令用于显示文件目录列表,当使用ls命令时,默认显示的只有非隐藏文件或文件夹(隐藏文件在linux中前面有 ' . ' ),当不加参数时,显示当前目录. 1.ls命令语法 ls [参数][目标文件 ...

  9. Eclipse java SE版本解决无法新建web项目问题

    最近工作要涉及web开发,之前下载的java SE (我的是indigo) 版本默认无法新建web项目,也就是找不到Dynamic Web ,在网上看了些解决办法,最终却是解决了问题,说到底就是安装一 ...

  10. IntelliJ IDEA 破解之后,用了一段时间后,打开软件提示 no suitable licenses left on the license server

    IntelliJ IDEA 破解之后,用了一段时间后,打开软件提示 no suitable licenses left on the license server 需要让我们重新注册,原来是之前的地址 ...