【问题标题】:Testing on angular $resource query shows error of ngResourceProvider not found对角度 $resource 查询的测试显示未找到 ngResourceProvider 的错误
【发布时间】:2014-08-01 02:02:15
【问题描述】:
<script src="/library/angularjs/1.2.0-rc.3/angularjs.js"></script>
<script src="/library/angularjs/1.2.0-rc.3/angular-route.js"></script>
<script src="/library/angularjs/1.2.0-rc.3/angular-resource.js"></script>
<script>
var app= angular.module('myApp', ['ngRoute', 'ngResource']);
app.service('Greeter', ['$resource',function($resource){
  return $resource(
    'http://123.com/processor.php',
    {callback: 'JSON_CALLBACK'},
    {
      query: {method:'JSON_CALLBACK',isArray:true}
    });
}]);

app
.controller('MyCtrl', ['$scope', 'Greeter',
  function($scope,Greeter){
  alert("yes");
  $scope.greet = function(){
    alert("greetttt");
    Greeter.query({name:this.name}, function(response){
      alert(response.greeting);
    });
  };
}]);
</script>
<div ng-app="myApp">
  <div ng-controller="MyCtrl">
  Your name: 
    <input type="text" name="name" value="World"/>
    <button ng-click="greet()">greet</button>
  </div>
</div>

PHP 文件只是简单地抛出了一个 JSON 数组,但我看到 chrome 检查员告诉我:

Error: [$injector:unpr] Unknown provider: $resourceProvider <- $resource <- Greeter

不知道有没有语法错误?由于 PHP 确实抛出了一个有效的 JSON 数组。

谢谢

更新1---- 我更新代码显示我以正确的顺序加载了资源和角度。 在 Bielski 修复之后,仍然有错误显示(同样的错误) 错误:[$injector:unpr] 未知提供者:$resourceProvider 更新 2 在 runTarm 修复之后,现在唯一的麻烦似乎是我引用 Greeter 的方式不正确...... ReferenceError: Greeter 未定义 在 Scope.$scope.greet (http://123.com/index-query.php:21:5) 代表这一行: Greeter.query({name:this.name}, function(response){

更新 3

建议添加 Greeter 广告资源后,还是会出现如下错误:

TypeError: undefined is not a function
    at Scope.$scope.greet (http://123.com/index-query.php:21:13)

这 3 行之间似乎有问题

$scope.greet = function(){
    alert("greetttt");
    Greeter.query({name:this.name}, function(response){

【问题讨论】:

  • 您是否包含了angular-resource.js 脚本?
  • @runTarm 我做到了。我也更新了问题,请看一下。谢谢你:)

标签: javascript angularjs


【解决方案1】:

您必须在模块的依赖项列表中包含 ngResource,如下所示:

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

另一件事是关于greet() 函数,当您像这样在ng-click 中绑定一个函数时:

<button ng-click="greet()">

Angular 会在控制器的作用域中寻找 greet() 函数,但您在控制器实例本身中定义 greet()

一种方法是将greet() 函数移动到$scope 中,如下所示:

app
  .controller('MyCtrl', ['$scope', 'Greeter',
    function($scope, Greeter){
      alert("yes");
      $scope.greet = function(){
        alert("greetttt");
        Greeter.query({name:this.name}, function(response){
          alert(response.greeting);
        });
      };
  }]);

【讨论】:

  • 我更新了这个问题,但是,现在它抱怨 Greeter 没有定义。我以为是我没有在控制器中引用它,但即使我这样做了,错误仍然存​​在。非常感谢您!
  • 你忘记了控制器函数中的Greeter参数(在$scope之后)。
  • 我已编辑答案以反映您的新代码。我的意思是.controller('MyCtrl', ['$scope', 'Greeter', function($scope, Greeter){
  • 我真的很困惑,还是一样,我再次更新了代码以反映您提出的更改,但有同样的错误。范围似乎有问题
  • 您必须使用app.factory('Greeter', 而不是.service('Greeter'。我打赌你会发现另一个错误,method: 'JSON_CALLBACK' 是什么意思?它应该是“GET”、“POST”或其他有效的 HTTP 动词。
【解决方案2】:

$resource 提供程序未正确加载和/或引用。两件事:

首先,您需要确保文件“angular-resource.js”正在加载到您的页面中,并且在您加载应用程序之前,它出现在要加载的脚本列表中。

其次,尝试像这样设置您的服务:

app.service('Greeter', ['$resource', function($resource){
  return $resource(
    'http://123.com/processor.php', 
    {callback: 'JSON_CALLBACK'},
    {
      query: {method:'JSON_CALLBACK',isArray:true}
    });
}]);

这将保护您免受缩小错误的影响,并且有时使用这种格式更容易发现缺少哪些提供程序。

【讨论】:

  • 我相应地修复了,但仍然是同样的错误。我找不到原因...请帮忙谢谢!
【解决方案3】:

您忘记将 Greeter 添加到控制器函数的参数中

app
.controller('MyCtrl', ['$scope', 'Greeter',
  function($scope, Greeter){
  alert("yes");
  $scope.greet = function(){
    alert("greetttt");
    Greeter.query({name:this.name}, function(response){
      alert(response.greeting);
    });
  };
}]);

【讨论】:

    猜你喜欢
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    相关资源
    最近更新 更多