AngularJS - 将 $resource.query 与 params 对象一起使用

2024-02-01

我正在尝试接起angular.js http://angularjs.org并致力于找出一些记录较少的事情。

考虑一下 - 我在服务器上有一个搜索方法,它接受查询参数并返回搜索结果的集合,并响应GET /search.json路线(Rails FWIW)。

So with jQuery,示例查询如下所示:

$.getJSON('/search', { q: "javascript", limit: 10 }, function(resp) {
  // resp is an array of objects: [ { ... }, { ... }, ... ]
});

我正在尝试使用 Angular 来实现它,并了解它是如何工作的。这就是我现在所拥有的:

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

app.controller('SearchController', ['$scope', '$resource', function($scope, $resource){

  $scope.search = function() {
    var Search = $resource('/search.json');
    Search.query({ q: "javascript", limit: 10 }, function(resp){
      // I expected resp be the same as before, i.e
      // an array of Resource objects: [ { ... }, { ... }, ... ]
    });
  }
}]);

并在视图中:

<body ng-app="searchApp">
  ...
  <div ng-controller="SearchController">
    ...
    <form ng-submit="search()">...</form>
    ...
   </div>
</body>

但是,我不断收到类似错误TypeError: Object #<Resource> has no method 'push' and $apply already in progress.

如果我改变的话,事情似乎会按预期进行$resource初始化如下:

var Search = $resource("/search.json?" + $.param({ q: "javascript", limit: 10 }));
Search.query(function(resp){ ... });

初始化似乎更直观$resource一次,然后根据请求的搜索的变化传递不同的查询参数。我想知道我是否做错了(最有可能)或者只是误解了调用的文档$resource.query使用查询参数对象作为第一个参数是可行的。谢谢。


类型错误:对象#已经没有方法“push”和$apply 进行中

因为您还没有定义名称为的资源Search。首先您需要定义这样的资源。文档:$资源 http://docs.angularjs.org/api/ngResource.%24resource。这是一个示例实现

angular.module('MyService', ['ngResource'])
       .factory('MyResource', ['$resource', function($resource){

    var MyResource = $resource('/api/:action/:query',{
        query:'@query'
    }, { 
        search: {
            method: 'GET',
            params: {
                action: "search",
                query: '@query'
            }
        }
    }); 
    return MyResource;
}]); 

将此模块包含在您的应用程序中并在像这样的控制器中使用它

$scope.search_results = MyResource.search({
   query: 'foobar'  
}, function(result){}); 

但是我不确定这是否是您所需要的。资源服务与 RESTful 服务器端数据源(也称为 REST API)交互。

也许您只需要一个简单的 http get:

 $http({method: 'GET', url: '/someUrl'}).
  success(function(data, status, headers, config) {
    // this callback will be called asynchronously
    // when the response is available
  }).
  error(function(data, status, headers, config) {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
  });

http://docs.angularjs.org/api/ng.$http http://docs.angularjs.org/api/ng.%24http

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

AngularJS - 将 $resource.query 与 params 对象一起使用 的相关文章

随机推荐

  • 如何扩展/覆盖插件的控制器操作?

    我在 grails 应用程序中使用的插件 Nimble 0 3 包括一些控制器和相关操作 我想 稍微 改变一些动作行为 我想知道如何才能实现这一目标 我可以创建一个子控制器继承自我的插件控制器并覆盖一些操作实现 或者 我可以创建另一个控制器
  • 有没有办法改变 Spark 中 RDD 的复制因子?

    据我了解 集群中的RDD中存在多份数据 这样当某个节点发生故障时 程序可以恢复 然而 在失败的可能性可以忽略不计的情况下 在 RDD 中拥有多个数据副本在内存方面将是昂贵的 那么 我的问题是 Spark中是否有一个参数可以用来减少RDD的复
  • Java 接口和返回类型

    考虑我有以下界面 public interface A public void b 但是 我希望实现它的每个类对于方法 b 都有不同的返回类型 例子 public class C public C b public class D publ
  • Rails 3. 按匹配次数排序(多对多)

    我在两个模型之间有多对多关联 class User lt ActiveRecord Base has many user works has many works through user works end class UserWork
  • 如何打印由字母组成的菱形? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想了解如何打印钻石 如下所示 我是初学者 非常感谢您的帮助 给定一个字母 打印出一颗以 A 开头的钻石 所提供的字母位
  • 确定类型是否为匿名类型[重复]

    这个问题在这里已经有答案了 在C 3 0中 是否可以判断一个实例是否Type代表匿名类型 即使匿名类型是普通类型 您也可以使用一些启发式方法 public static class TypeExtension public static B
  • 每次保存文件时运行相应的单元测试

    我刚刚转而使用 PyCharm 作为我的主要 Python 编辑器 并且很想知道如何配置它 以便每次保存文件时 都会运行与修改后的文件相对应的单元测试 浏览文档后 我没有找到如何执行此操作的明确解释 当您运行单元测试时 您会得到一个新的单元
  • 南姜戈迁徙

    我已经做了 python manage py schemamigration TestDBapp1 initial python manage py schemamigration TestDBapp1 auto 成功地 但如果我输入 py
  • 获取表内的方法形式

    我之前问过一个问题 但我认为我没有正确地提出问题 这是我的代码 HTML
  • 最简单的跨浏览器检查协议处理程序是否已注册

    当用户单击带有自定义协议的链接时 例如myapp superlink 我需要启动应用程序或允许用户下载并运行配置应用程序 我正在寻找跨浏览器的方法来检查自定义协议是否已注册 我试图通过检查用户代理服务器端 对于 IE 来确定这一点 HKEY
  • 构建库代码的最佳方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如果我是唯一的用户,可以避免 ROAuth 握手中的 PIN 步骤吗?

    Question 有没有办法避免在进行 OAuth 握手时手动输入 PIN Context 进行 ROAuth 握手时 系统会要求我输入通过以下链接获取的 PIN rm list ls library twitteR library ROA
  • 捕获 ThreadAbortException 时隐藏的 Throw 有何作用?

    我正在阅读一本关于一般 C 开发的书 并且已经读到了线程中止部分 这本书说 当你在另一个线程上调用 Thread Abort 时 该线程将抛出 ThreadAbortException 即使你试图抑制它 它也会自动重新抛出它 除非你做了一些
  • 将组件推送到组件数组 - ReactJS

    我对 React 数组有点迷失了 我想要做的是拥有组件 文章 数组 并且在该数组中我想要拥有标题和内容 我想要对该数组执行的操作是添加 删除并将其显示在我的页面上 那么我做错了什么 另外这个动作到底叫什么 代码来自ReactJS 演示 ht
  • jquery 图像映射调整大小

    我编写此函数是为了重新调整 onLoad 元素的位置以及用户是否调整浏览器窗口的大小 它在加载时工作正常 但在调整窗口大小时无法正确重新计算 我究竟做错了什么 var orig width jQuery imageMaps attr wid
  • React.js:数组和“违反了有关合并函数的关键假设”错误

    http jsfiddle net NV f54Xr http jsfiddle net NV f54Xr jsx React DOM var Dummy React createClass mixins React addons Link
  • 使用Python将ts转换为mp4[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 编辑问题以包括期望的行为 特定问题或错误以及重现
  • 使用 PhantomJS 运行 RequireJS/WireJS 应用程序

    我正在尝试执行一个使用 RequireJS 2 1 8 WireJS 0 10 2 和 PhantomJS 1 9 2 的基本应用程序 当使用 PhantomJS 运行应用程序时 这是我的目标 WireJS 无法加载 请参见下面的错误 使用
  • 中心导航栏链接没有品牌将其推到 Bootstrap 4 的右侧?

    我试图将我的导航栏链接居中 但是当我这样做时 我的品牌徽标将其推到右侧 因此它不居中 这是我的 html
  • AngularJS - 将 $resource.query 与 params 对象一起使用

    我正在尝试接起angular js http angularjs org并致力于找出一些记录较少的事情 考虑一下 我在服务器上有一个搜索方法 它接受查询参数并返回搜索结果的集合 并响应GET search json路线 Rails FWIW