<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){
答案 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);
});
};
}]);