Angularjs - 自定义 $resource

2024-02-21

我用角$resource用于 REST 服务。由于我的 get 响应中的怪癖,我无法将 $resource 服务用于 CRUD 应用程序。

创建一个新对象work(Card的day),类似于:

var newCard = new CreditCard();
newCard.name = "Mike Smith";
newCard.$save();

获取也有效:

var card = CreditCard().get({_id:1)

但是,GET 响应不是对象Card本身,但带有它的其他消息(包装对象)

{ message: ".....",
  response: Card //object
}

因此,当我保存通过资源检索的实例时,它会发送包装器对象(在响应字段中包含修改后的卡对象)。 这可能是正确的,但我的服务器期望 Card 对象而不是包装器。 有没有办法自定义 $resource 以便它发送所需的对象。从文档来看,似乎只能更改 url 参数。

$resource(url[, paramDefaults][, actions]);

我在 $resource 模块中的标准实现方面也遇到了问题。有一段时间,我只是在自己的 $resource 文件的本地副本中进行了编辑,但我发现我仍然对他们实现 REST 资源的方式不满意。我需要比所提供的更多的灵活性。

标准$资源 https://github.com/angular/angular.js/blob/master/src/ngResource/resource.jsmodule 只是 $http 的工厂包装器。如果您简化 $resource 模块中的代码,您可以相当轻松地创建自己的自定义实现。

var app = angular.module('app', []);

app.factory('CreditCard', ['$http', function($http) {

    function CreditCardFactory() {

        function parseMessage(message) {
            if (message.response) {
                return message.response;
            }
        }

        function CreditCard(value) {
            angular.copy(value || {}, this);
        }

        CreditCard.$get = function(id) {
            var value = this instanceof CreditCard ? this : new CreditCard();
            $http({
                method: 'GET',
                url: '/creditcards/' + id
            }).then(function(response) {
                var data = response.data;
                if (data) {
                    angular.copy(parseMessage(data), value);
                }
            });
            return value;
        };

        CreditCard.prototype.$get = function(id) {
            CreditCard.$get.call(this, id);
        };

        return CreditCard;

    }

    return CreditCardFactory;

}]);

然后,在您的控制器函数中,注入 CreditCard 工厂,就像注入 $resource 一样。

app.controller('CreditCardCtrl', function($scope, CreditCard) {
    $scope.creditCard = CreditCard().get(3);
});

这允许您以任何您想要的方式解析 REST 操作的响应,并且还允许您实现您想要的任何操作。例如:我想要在我的资源上有一个 save 方法,该方法会在选择使用 POST(当没有 id 可用时创建新资源)或 PUT(当 ID 不可用时更新现有资源)之前检查对象是否具有 id 属性。有效的 ID 可用)。

这也将允许您实施一种不同的方式来处理JSON CSRF 漏洞 http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx。 angular.js 方式内置于 $http 中,但我公司的 REST API 通过将 JSON 数组包装在虚拟对象中来解决此问题。我使用像上面这样的自定义资源来解析虚拟对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angularjs - 自定义 $resource 的相关文章

  • 生成随机数背后的数学(崩溃游戏 BTC Casino)

    我正在开发一款基于网络的游戏 其中有多个迷你游戏 我们坚持还添加一个在赌博界非常流行的崩溃游戏 然而 我们一直在努力理解生成随机 几乎不可预测 数字的概念 大多数赌博网站都会提供哈希值等来证明数字未被篡改 我们真的不需要这个 因为我们的游戏
  • JavaScript(或 jQuery)中有“有焦点”吗?

    我可以这样做吗 也许通过插件 if form contact input hasFocus form contact input first focus 基本上 将焦点设置为第一个输入 但前提是用户尚未单击任何内容 我知道这也行 但是还有更
  • 尝试制作Linux终端但失败

    这可能是一个愚蠢的问题 可能很容易找到 但我对这一切都很陌生 我似乎找不到我要找的东西 或者至少我不知道我需要寻找什么 所以我在这里 所以我想做的是创建一种 Linux 终端 这就是我到目前为止所得到的 我所坚持的是实际输入文本部分 我一直
  • 如何使用 jQuery 添加/附加到外部 JSON 文件

    我有一个 json 文件 我想构建一个表单 允许我在文件中添加 编辑元素 是否有 jQuery 函数 方法允许我在外部 json 文件中发布和追加元素 不确定这是否有帮助 但当前的 json 结构如下 cast director genre
  • Javascript dispatchEvent click 在 IE9 和 IE10 中不起作用

    我正在尝试在 ExtJs 中构建应用程序时模拟鼠标事件 例如单击 鼠标悬停等 我使用下面的代码来模拟点击 function triggerEvent element eventName if document createEvent var
  • 使用 Nestjs 和 typeorm 保存实体的审核

    我有一个实体Audit就像下面在 Nestjs 应用程序中使用 typeorm for mongodb 一样 Entity export class Audit Column createdBy string BeforeInsert se
  • scrollTop 在 Chrome 中不起作用,建议的解决方法也不起作用

    许多其他问题 here https stackoverflow com questions 2544979 is there a problem with scrolltop in chrome here https stackoverfl
  • jQuery:当使用 on .scroll 事件和警报时,firefox 似乎无限循环

    我的主模板之一中有以下 jQuery 代码 document scroll function var scroll top document scrollTop alert scroll top if scroll top lt 70 fi
  • React Native 中的动画背景颜色

    我将如何在 React Native 中将一种颜色动画化为另一种颜色 我发现通过插入 Animated Value 您可以通过以下方式对颜色进行动画处理 var BLACK 0 var RED 1 var BLUE 2 background
  • 如何通过两个输入文本字段组合表中的搜索?

    我的桌子看起来像这样 table tr td Apple td td Green td tr tr td Grapes td td Green td tr tr td Orange td td Orange td tr table 搜索的j
  • 如何防止字段的角度自动修剪?

    有没有什么方法可以防止整个应用程序中字段的角度自动修剪 我知道我可以使用 ngTrim 指令防止指定字段出现这种情况 但将此指令添加到应用程序中的所有文本字段看起来不太好 有什么方法可以对 Angular 模块中的所有字段执行此操作吗 这是
  • 使用jquery,下拉列表选择更改时如何重定向?

    我有一个下拉列表 如果有人选择一个选项 我想根据选择重定向到另一个页面 我怎样才能通过 jquery 做到这一点 将逻辑绑定到 change 事件 并从中获取当前值 val 以确定用户应该被重定向到哪里 此示例假设位置直接存储在值本身中 m
  • 添加/更改 URL 参数并重定向到新 URL

    If the view allURL 中不存在参数 我需要将其与值一起添加到 URL 的末尾 如果它确实存在 那么我需要能够仅更改该值而不创建新的 URL 因为它之前可能有也可能没有其他参数 我找到了这个功能 但我无法让它工作 https
  • JavaScript switch 语句是线性的还是恒定时间的?

    我的网站上有以下 JavaScript 以便在执行某些特定搜索时 答案会被硬编码到特定页面 function redirect var input document getElementById searchBox value toLowe
  • Kendo Angular 多选设置选定值

    我将 Kendo 多重选择与 Angular Kendo 指令和远程数据源一起使用 我试图在应用程序启动时设置所选项目 但没有成功 谁能帮帮我吗 请参阅此处的代码 JS Bin http jsbin com OkukInIc 1 edit
  • 如何更改 angularjs $http.jsonp 的标头

    我读了document http docs angularjs org api ng 24http 但我想我一定是误解了 http defaults headers jsonp Accept application json http js
  • 如何触发UI-Router View Load事件?

    第一次测试 ui router 但目前测试事件 我似乎无法理解如何触发 viewContentLoaded 或 Loading 虽然 我已经有 stageChangeSuccess 等工作了 我只是把一切都推到了http punkbit c
  • 静态资源和非静态资源有什么区别?

    我主要是一名前端开发人员 设计师 但最近我一直在探索端到端解决方案 昨天 我使用平均堆栈完成了一个 TODO 应用程序 并想开始探索我的 VPS 的部署选项 话虽这么说 有人建议我使用 nginx 作为反向代理来提供静态资源 不幸的是 我陷
  • Django pbkdf2_sha256 JS 实现

    我有一个来自 django 的数据库 我想从 Node js 中使用它 我有一个任务 验证用户身份 从数据库可知 算法 pbkdf2 sha256 salt 10000 次迭代和 base64 编码的哈希值 我必须在 JS 中执行哪些步骤才
  • 访问 django for 循环中的元素

    我有一个 Django 模板 其中包含以下代码 该模板创建多个按钮并尝试通过单击 在同一按钮上 删除 隐藏其中一个按钮 for h in helicopters div class btn group div

随机推荐

  • 如何从Google GAIA ID查找用户信息?

    我一直在为 Google 的 Takeout 服务开发 Hangouts json 解析器 该解析器从 json 文件中获取所有对话 附件和杂项信息 并将所有内容填充到数据库中 我已经完成了所有工作 但 json 文件提供的唯一信息是发送
  • Django 中的 python-social-auth 自定义重定向 url

    我在用python social auth与 Django 一起打包来管理 oauth 和 openID 登录 现在的问题是 我可以在 django 中指定一个重定向 urlsettings py 但在某些情况下 我希望用户被重定向到他启动
  • 如何使子目录中的cakePHP 2.x出现在根目录中(在htaccess中使用mod_rewrite)? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在开发一个位于子目录内的蛋糕应用程序 因为我需要与同一域上的另一个应用程序一起运行它 我希望由 cake 提供支持的页面看起来就像是顶级的 所以而
  • 在结构体中声明 int 数组

    在C中 我定义了struct见下文 并希望内联初始化它 结构体内部的字段和数组都不是foos初始化后会改变 第一个块中的代码工作正常 struct Foo int bar int some array typedef struct Foo
  • Supervisord - 在supervisord.conf中使用变量

    转移到使用监督者 http supervisord org 作为过程控制系统 我有一个LONG并在我的supervisord conf中重复ENVIRONMENT配置 为很多进程设置很多环境变量 我需要将其定义在一处并重用它 以保持配置干燥
  • 我正在尝试直接连接到 abfss(无需安装到 DBFS)并尝试使用 databricks 中的 open() 打开 json 文件

    我正在尝试直接连接到 abfss 无需安装到 DBFS 并尝试使用 databricks 中的 open 方法打开 json 文件 json file open abfss dfs core windows net test json da
  • 非 ASCII 字符声明

    我想存储一个字符 以便将其与其他字符进行比较 如果我像这样声明变量 char c 一切正常 但我收到这些警告 warning multi character character constant Wmultichar char c ii c
  • 将无符号类型写入 Netty ChannelBuffer

    Netty 的 ChannelBuffer 类提供了从 ChannelBuffer 读取无符号类型的便捷方法 但是似乎没有任何等效的方法用于将无符号类型写入 ChannelBuffer 我觉得我一定错过了什么 推荐的方法是什么 例如将无符号
  • 将文件夹拆分为具有一定大小的较小文件夹

    我试图将一个文件夹划分为最大大小为 8 GB 的文件夹 起始文件夹 Folder 1 2KB file 2GB file 7GB file Folder 2 1GB file 5 6GB file Folder 3 8GB file 我想把
  • 在面向 iOS 7 的项目中导入 Alamofire

    我检查了新的 Alamofire 安装步骤 由于我需要针对 iOS 7 0 我想知道是否导入Alamofire swift是否足以使其发挥作用 为什么文档指出将函数包装在Struct Alamofire 是否需要调用命名空间中的函数 在这种
  • SQL 将数据从临时表插入到另外两个表中

    我遇到过这样的情况 将 CSV 上传到我的应用程序 并且每一行基本上都需要放入数据库中 我读取每一行并构建一个数据表 然后 SqlBulkCopy 该表到临时表 暂存表如下所示 UserID GroupID FirstName LastNa
  • 确定日期开始的时间

    假设我想创建一个每日计划表 并且我想将一天分为 15 分钟的部分 容易 对吧 就从午夜开始 然后 错了 在美洲 圣保罗 由于夏令时的变化 每年的某一天从 01 00 开始 给定一个时区和一个日期 如何找到一天开始的纪元时间 我的第一个想法是
  • VB.Net - AssemblyFileVersion 和 AssemblyFileVersionAttribute 以及 AssemblyVersion 和 AssemblyVersionAttribute 之间有什么区别

    我继承了 VB Net 代码库 该代码库是 VB 2005 并升级到 VB 2008 其中包含大约 100 个项目 我正在尝试重新版本所有组件 但发现某些 AssemblyInfo vb 文件具有AssemblyFileVersion条目
  • 如何使 Angular ui 网格最初展开所有行?

    我正在使用 ui 网格来显示数据列表 并且我正在尝试最初展开所有行 我试图在 onRegisterApi 事件中执行此操作 scope GridOptions data properties columnDefs name Full Add
  • 如何将列表中的所有元素划分在一起

    例如 a 1 2 3 4 5 6 我想要做 1 2 3 4 5 6 我尝试过使用operator div函数 但似乎没有给出正确的结果 顺便说一句 我对 python 还很陌生 您可以使用reduce https docs python o
  • 动态“case_when”允许不同数量的条件和条件本身

    我正在寻找一种动态方法来指定一些 条件参数 然后将其提供给case when操作或其他更适合该问题的操作 我的目标是将条件规范与 case when 调用分开 例如这样用户只需在文本文件或 R 中的列表中输入条件 然后我将获取该信息并将其提
  • 防止图像缓存在浏览器中

    我有一个 浏览图片 功能 其中有缩略图 当用户单击它时它会展开 现在 这两个图像都存储在不同大小的单独虚拟目录中 较大的是 200 200 px 当我点击放大时 它仍然只显示较小的图像 而不是 200 200 的图像 您可以将随机 URL
  • Django - 通过模型名称获取 ContentType 模型(通用关系)

    我现在正在思考这个问题一段时间 我正在创建一个聊天应用程序 在 chat models 中指定了 Room 类 但是 Room 可以与我的项目中的任何内容相关 因为它在外键中使用通用关系 有没有办法只知道模型名称就知道 Room 与哪个模型
  • 如何在 MySQL GROUP BY 子句中排序或选择行?

    我有一个这样的表 id number otherfields 664 48 aaa 665 49 bbb 666 55 ccc 667 48 ddd 我的查询分组为number字段 我希望它选择第一个 最低 id 这样数据就出来了ccc a
  • Angularjs - 自定义 $resource

    我用角 resource用于 REST 服务 由于我的 get 响应中的怪癖 我无法将 resource 服务用于 CRUD 应用程序 创建一个新对象work Card的day 类似于 var newCard new CreditCard