我正在尝试"自定义"mongolab示例以适合我自己的REST API.现在我遇到了这个错误,我不确定我做错了什么:
Error: Unknown provider: ProductProvider <- Product
at Error (unknown source)
at http://localhost:3000/js/vendor/angular.min.js:28:395
at Object.c [as get] (http://localhost:3000/js/vendor/angular.min.js:26:180)
at http://localhost:3000/js/vendor/angular.min.js:28:476
at c (http://localhost:3000/js/vendor/angular.min.js:26:180)
at d (http://localhost:3000/js/vendor/angular.min.js:26:314)
Run Code Online (Sandbox Code Playgroud)
这是我的控制器:
function ProductListCtrl($scope, Product) {
$scope.products = Product.query();
}
Run Code Online (Sandbox Code Playgroud)
这是模块:
angular.module('productServices', ['ngResource']).
factory('Product', ['$resource', function($resource){
var Product = $resource('/api/products/:id', { }, {
update: { method: 'PUT' }
});
return Product;
}]);
Run Code Online (Sandbox Code Playgroud)
pko*_*rce 130
你的代码看起来不错,实际上它复制并粘贴到一个示例jsFiddle中时(除了调用本身):http://jsfiddle.net/VGaWD/
很难说没有看到更完整的例子会发生什么,但我希望上面的jsFiddle会有所帮助.我怀疑的是你没有使用'productServices'模块初始化你的应用程序.它会给出同样的错误,我们可以在另一个jsFiddle中看到这个:http://jsfiddle.net/a69nX/1/
如果您打算使用AngularJS和MongoLab,我建议使用$ resource和MongoLab的现有适配器:https://github.com/pkozlowski-opensource/angularjs-mongolab 它减轻了使用MongoLab的大部分痛苦,你可以在这里看到它:http://jsfiddle.net/pkozlowski_opensource/DP4Rh/ 免责声明!我正在维护这个适配器(基于AngularJS示例编写),所以我显然有偏见.
bre*_*per 40
我收到了这个错误,因为我将错误的参数传递给工厂定义.我有:
myModule.factory('myService', function($scope, $http)...
Run Code Online (Sandbox Code Playgroud)
当我删除$scope并将工厂定义更改为:
myModule.factory('myService', function( $http)...
Run Code Online (Sandbox Code Playgroud)
如果您需要注射$scope,请使用:
myModule.factory('myService', function($rootScope, $http)...
Run Code Online (Sandbox Code Playgroud)
Pre*_*exo 32
我刚遇到类似的问题.错误说同样的问题,试图用pkozlowski.opensource和Ben G的答案解决它,这两个都是正确和好的答案.
我的问题确实与同样的错误有所不同:
在我的HTML代码中我有这样的初始化...
<html ng-app>
Run Code Online (Sandbox Code Playgroud)
再往下一点,我试着这样做:
<div id="cartView" ng-app="myApp" ng-controller="CartCtrl">
Run Code Online (Sandbox Code Playgroud)
我摆脱了第一个...然后它工作了......显然你不能初始化ng-app两次或更多次.很公平.
我完全忘记了第一个"ng-app"并且总是感到沮丧.也许这会帮助一些人...
小智 25
确保您的主要app.js包括它所依赖的服务.例如:
/* App Module */
angular.module('myApp', ['productServices']).
.....
Run Code Online (Sandbox Code Playgroud)
Ben*_*n G 17
pkozlowski的答案是正确的,但为了防止其他人发生这种情况,我错误地创建了两次相同的模块后出现了同样的错误; 第二个定义是覆盖第一个的提供者:
我做了创建模块
angular.module('MyService'...
).factory(...);
Run Code Online (Sandbox Code Playgroud)
然后在同一个文件中进一步向下:
angular.module('MyService'...
).value('version','0.1');
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是:
angular.module('MyService'...
).factory(...).value('version','0.1');
Run Code Online (Sandbox Code Playgroud)
man*_*nta 11
就我而言,我已经定义了一个新的提供者,比方说, xyz
angular.module('test')
.provider('xyz', function () {
....
});
Run Code Online (Sandbox Code Playgroud)
当你配置上面的提供者时,你要用Provider附加的字符串注入它- > xyz成为xyzProvider.
例如:
angular.module('App', ['test'])
.config(function (xyzProvider) {
// do something with xyzProvider....
});
Run Code Online (Sandbox Code Playgroud)
如果您在没有'Provider'字符串的情况下注入上述提供程序,您将在OP中获得类似的错误.
这花了我很长时间才能追踪。确保在指令内对控制器进行迷你安全。
.directive('my_directive', ['injected_item', function (injected_item){
return {
controller: ['DO_IT_HERE_TOO', function(DO_IT_HERE_TOO){
}]
}
}
Run Code Online (Sandbox Code Playgroud)
希望能有所帮助
为了在这里添加我自己的经验,我试图将一个服务注入我的一个模块配置功能.我最终找到的文档中的这一段解释了为什么这不起作用:
在应用程序引导期间,在Angular创建所有服务之前,它会配置并实例化所有提供程序.我们称之为应用程序生命周期的配置阶段.在此阶段,服务无法访问,因为尚未创建服务.
这意味着你可以将提供者注入module.config(...)函数,但你不能注入服务,因为你需要等到module.run(...),或者暴露你可以注入模块的提供者.配置
| 归档时间: |
|
| 查看次数: |
268870 次 |
| 最近记录: |