对angular $ resource查询进行测试显示找不到ngResourceProvider的错误

时间:2014-07-31 15:55:36

标签: javascript angularjs

<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数组。

由于

UPDATE1 ---- 我更新代码显示我以正确的顺序加载了资源和角度。 在Bielski修复之后,仍有错误显示(同样的错误)     错误:[$ injector:unpr]未知提供者:$ resourceProvider&lt; - $ resource&lt; - Greeter 更新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){

3 个答案:

答案 0 :(得分:1)

$ 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}
    });
}]);

这样可以防止缩小错误,有时候可以通过这种格式找出哪些提供商丢失了。

答案 1 :(得分: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);
        });
      };
  }]);

答案 2 :(得分:0)

您忘了将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);
    });
  };
}]);