广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >AngularJS中如何使用$resource
  • 659
分享到

AngularJS中如何使用$resource

2024-04-02 19:04:59 659人浏览 八月长安
摘要

这篇文章主要为大家展示了“angularjs中如何使用$resource”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“AngularJS中如何使用$resour

这篇文章主要为大家展示了“angularjs中如何使用$resource”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“AngularJS中如何使用$resource”这篇文章吧。

REST是Representational State Transfer(表征状态转移)的缩写,是服务器用来智能化地提供数据服务的一种方式  

1)我们首先需要引入ng-Resource  模块,在angular之后

 <script src="js/vendor/angular.js"></script>
  <script src="js/vendor/angular-resource.js"></script>

2) 在我们的应用中需要将其当做依赖进行引用

angular.module('myApp', ['ngResource']);

3)如何使用?

$resource服务本身是一个创建资源对象的工厂,返回的$resource对象中包含了同后端服务器进行的交互的高层api.

var User=$resource('/api/users/:userId',{userId:'@id'});

可以把User对象理解成同RESTful的后端服务进行交互的接口。

一、HTTP GET类型的方法

①GET请求:  get(params,successFn,errrorFn)

不定义具体的参数,get()请求通常被用来获取单个资源。

//GET /api/users
  User.get(function(resp){
  //处理成功 
  
  },function(err){
  //处理错误
  
  });

如果参数中传入了具名参数(我们例子中的参数是id),那么get()方法会向包含id的URL发送请求:   

  //发起一个请求:GET-->/api/users/123
  User.get({id:'1234'},function(resp){
    //success
  },function(error){
    //fail
  });

②QUERY 请求:query向指定URL发送一个GET请求,并期望返回一个JSON格式的资源对象集合

 //发起一个请求
 User.query(function(users){
  //读取集合中的第一个用户
  var user=users[0];
 });

query()和get()方法之间唯一的区别是AngularJS期望query()方法返回数组。 

二、非HTTP GET类型的方法    

1. save(params, payload, successFn, errorFn)

save方法向指定URL发送一个POST请求,并用数据体来生成请求体。save()方法用来在服务器上生成一个新的资源。 payload:代表请求发送的数据体

  //发送一个请求 with the body {name: 'Ari'}
  User.save({},{name:'Ari'},function(resp){
  
  },function(error){
  
  });

2. delete(params, payload, successFn, errorFn)   

delete方法会向指定URL发送一个DELETE请求,并用数据体来生成请求体。它被用来在服务器上删除一个实例:  

  // DELETE /api/users
  User.delete({}, {
    id: '123'
  }, function(response) {
  // 处理成功的删除响应
  }, function(response) {
  // 处理非成功的删除响应
  });

3. remove(params, payload, successFn, errorFn)

remove方法和delete()方法的作用是完全相同的,它存在的意义是因为delete是javascript的保留字,在IE浏览器中会导致额外的问题。  

  // 发起一个请求:
  // DELETE /api/users
  User.remove({}, {
   id: '123'
  }, function(response) {
  // 处理成功的删除响应
  }, function(response) {
  // 处理非成功的删除响应
  });

三、$resource设置对象

$resource对常见的五种请求进行封装,我们还可以对$resource进行扩展,这里要扩展$resource我们需要传入第三个参数,该参数是一个对象。

$resource('/api/users',{},{ 
 sendEmail:{ 
  method:'', 
  url:'', 
  params:{}, 
  isArray:boolean, 
  transfORMRequest:函数或者函数数组 
  transformResponse:函数或者函数数组 
  cache:布尔型或缓存对象 
  timeout:数值或promise对象 
  withCredentials:布尔类型 
  responseType:字符串,用来设置XMLHttpRequestResponseType属性 
 } 
})

四、$resource实例

示例1:简单的CRUD --摘自点击打开链接 这哥们总结的很全面

var User = $resource('/user/:userId', {userId:'@id'});  
var user = User.get({userId:123}, function() {  
 user.abc = true;  
 user.$save();  
});

注意上面代码中的”@id”和”$save()”,使用了@后,当执行$save时,user.id就会被当做userId的值来发送请求。

以这种方式封装ajax,不仅仅使得代码更加优雅,而且还能配合ng的视图渲染:当数据没有返回之前,模板引擎不会渲染,一旦异步数据获取完成,会自动触发模板引擎的渲染机制把数据呈现到视图中。

 怎么理解呢?

简单来说,上述方法在返回数据时,响应会被一个原型类包装,并在实例中添加一些有用的方法。

有以下三个实例方法:

  • $save()

  • $remove()

  • $delete()

这三个方法可以在资源实例上被调用,如上所示。需要格外注意,这三个方法在调用时$resource对象会立即返回一个空的数据引用。由于所有方法都是异步执行的,所以这个数据是一个空的引用,并不是真实的数据。

因此,虽然获取实例的调用看起来是同步的,但实际上不是。事实上,它只是数据的引用,当数据从服务器返回后AngularJS会自动将数据填充进去。

比如:

  // $scope.user将为空

  $scope.user = User.get({id: '123'});

这些方法也提供了回调函数,在数据返回时按预期的方式调用:

 User.get({id: '123'}, function(user) {

  $scope.user = user;

  });

五、$resource服务

服务配置方法:$resource(url,[paramDefaults],[ actions]);  

我们也可以将$resource服务当做自定义服务的基础。

 angular.module('testApp', ['ngResource']),factory('UserService',['$resource', function($resource){
  return $resource(url,{},{});
 }]);

举例:参考自AngularJS中的RESTful资源

app.factory('CreditCard', ['$resource', function($resource) { 
  return $resource('/usr/:userId/card/:cardId', 
  {userId: 123, cardId: '@id'}, 
  { 
  charge: {   //自定义的方法 
    method: 'POST',  
    params: {charge: true}, //表示需要作为请求的一部分来传递的参数 
    isArray: false 
    } 
  }) 
  }]);

在这里我们指定了一个charge方法,可以通过传递一个对象来配置这个方法,对象中的key就是需要暴露的方法名称。配置项中需要指定的内容有:请求的类型(GET、POST等)、需要作为请求的一部分来传递的参数(在这个例子中就是charge=true),以及返回的结果是否是一个数组(在这个例子中不是)。一旦做完这些事情之后,你就可以自由地调用CreditCard.charge()了。

说明:这是一种非常灵活的编码风格,根据上面的代码,对于配置对象{charge: {method: 'POST', params: {charge: true}, isArray: false},Angular会将其解析成一个方法,然后把这个方法绑定到返回的Restful对象上,上面的配置对象解释之后的方法为:

CreditCard.charge = function(charge, isArray) { 
//这里是方法体 
}

对于AngularJS应用来说,最常见的处理流程是:到服务器上获取数据,然后把数据赋值给变量,再把数据显示到模板中。这种快捷方式是非常好用的。在控制器代码中,你唯一要做的事情就是发起对服务端的调用,把返回值赋给正确的作用域变量,然后让模板自动负责渲染它。由于card变量是使用{{}}这种数据绑定技术绑定到视图上的,所以一开始给它一个空值并没有问题,等异步响应返回之后再把结果赋给它。这时候Angular的数据绑定机制会立即发现数据发生了变化,然后会自动通知视图进行刷新。从这里可以看到,使用Angular框架时,对异步调用的很多处理方式已经发生了细微的变化。

五、本人在项目中应用实例

define([ 
  '{angular}/angular', 
  '{angular-sanitize}/angular-sanitize', 
  '{w20-ui}/modules/select' 
], function (angular) { 
  'use strict'; 
 
  var hubComponentImport = angular.module('hubComponentImport', ['ui.select', 'ngSanitize']); 
 
  hubComponentImport.controller('hubImportComponentCtrl', ['$scope', '$routeParams', '$timeout','$resource','$location', function ($scope, $routeParams, $timeout,$resource,$location) { 
    $scope.editComponent = function () { 
      //初始化参数 
      $scope.component= {tags:[]}; 
      //利用$resource自定义post方法 
      var Components= $resource('rest/components/url',{},{ 
        getComponent: {method:'POST'} 
      }); 
      //接收页面输入数据,并发送请求 
      var component= Components.getComponent({},{url:$scope.componentUrl},function(data){ 
        $scope.component = data; 
      }); 
      //转向edit.html页面 
      $scope.searchComponent = 'manage/views/edit.html'; 
    }; 
     
     
  }]); 
 
  return { 
    angularModules: [ 'hubComponentImport' ] 
  }; 
});

以上是“AngularJS中如何使用$resource”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网JavaScript频道!

--结束END--

本文标题: AngularJS中如何使用$resource

本文链接: https://www.lsjlt.com/news/77502.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • AngularJS中如何使用$resource
    这篇文章主要为大家展示了“AngularJS中如何使用$resource”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“AngularJS中如何使用$resour...
    99+
    2022-10-19
  • AngularJS中如何使用three.js
    小编给大家分享一下AngularJS中如何使用three.js,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!AngularJS中...
    99+
    2022-10-19
  • angularJS如何使用
    小编给大家分享一下angularJS如何使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!事件指令:ng-click/dblcl...
    99+
    2022-10-19
  • vue中如何使用vue-resource插件
    vue中如何使用vue-resource插件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在使用这个插件之前,当然是先安装啦:npm ...
    99+
    2022-10-19
  • angularjs中如何使用ui-router分层
    小编给大家分享一下angularjs中如何使用ui-router分层,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先我们先定义...
    99+
    2022-10-19
  • 如何在AngularJs中结合SpringMVC使用
    本篇文章给大家分享的是有关如何在AngularJs中结合SpringMVC使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。首先我们把springmvc的环境搭好,先来web....
    99+
    2023-05-31
    angularjs springmvc
  • AngularJS中如何使用应用模块化
    这篇文章主要介绍AngularJS中如何使用应用模块化,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一.模块化的好处(1)实现逻辑更清晰、可读性强;(2)团队开发分工明确,容易控制;...
    99+
    2022-10-19
  • AngularJS中如何使用jQuery的zTree插件
    这篇文章主要介绍了AngularJS中如何使用jQuery的zTree插件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇AngularJS中如何使用jQuery的zTree插件文章都会有所收获,下面我们一起来看...
    99+
    2023-07-04
  • AngularJS中如何移除URL中的#
    本篇文章为大家展示了AngularJS中如何移除URL中的#,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。AngularJS 默认将会使用一个 # 号来对URL进行...
    99+
    2022-10-19
  • 如何使用try-with-resource机制关闭连接
    使用try-with-resource机制关闭连接 JAVA的一大特性就是JVM会对内部资源实现自动回收 即自动GC,给开发者带来了极大的便利。但是JVM对外部资源的引用却无法自动回...
    99+
    2022-11-12
  • AngularJS如何使用ocLazyLoad实现js延迟加载
    这篇文章主要介绍AngularJS如何使用ocLazyLoad实现js延迟加载,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!开发一个系统遇到了一个问题,用angular路由一个htm...
    99+
    2022-10-19
  • AngularJS中的过滤器filter怎么使用
    这篇文章主要介绍“AngularJS中的过滤器filter怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“AngularJS中的过滤器filter怎么使用”文章能帮助大家解决问题。在Angul...
    99+
    2023-07-04
  • AngularJS如何利用路由传值
    小编给大家分享一下AngularJS如何利用路由传值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下 1.导包&nbs...
    99+
    2022-10-19
  • AngularJS中ng-class样式如何切换
    这篇文章主要介绍AngularJS中ng-class样式如何切换,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、HTML<ion-view>   &...
    99+
    2022-10-19
  • 如何构建AngularJS中的Scope和Digest
    本篇内容介绍了“如何构建AngularJS中的Scope和Digest”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2022-10-19
  • Angularjs中如何实现脏值检测
    这篇文章主要介绍了Angularjs中如何实现脏值检测,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。构建自己的AngularJS,第一部分:...
    99+
    2022-10-19
  • angularjs如何使用数据同步时机ng-model-options
    这篇文章将为大家详细讲解有关angularjs如何使用数据同步时机ng-model-options,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。#ng-model-opt...
    99+
    2022-10-19
  • 如何使用NodeJS+MongoDB+AngularJS+Bootstrap开发书店项目
    这篇文章给大家分享的是有关如何使用NodeJS+MongoDB+AngularJS+Bootstrap开发书店项目的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。示例名称:天狗书店...
    99+
    2022-10-19
  • AngularJS如何使用angular.bootstrap完成模块手动加载
    这篇文章主要介绍AngularJS如何使用angular.bootstrap完成模块手动加载,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本文实例分析了AngularJS使用angu...
    99+
    2022-10-19
  • Angularjs如何使用过滤器完成排序功能
    这篇文章给大家分享的是有关Angularjs如何使用过滤器完成排序功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下<!DOCTYPE html>...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作