我对如何创建服务以及在我的控制器中注入(使用)它感到困惑。它似乎很简单,但我无法让我的代码工作。我坚持这个错误:
Error: [$injector:unpr] Unknown provider: Flickr
我定义了服务:
angular.module('myApp.services', [])
.provider('Flickr', function(){
// service code
})
将其包含在我的应用模块中:
var app = angular.module('myApp', [
'ngResource',
'ngRoute',
'myApp.services'
]);
然后在控制器中引用它:
app.controller('FlickrCtrl', ['$scope', '$routeParams', 'Flickr', function($scope, $routeParams, Flickr){
// controller stuff
});
并引用index.html
<script src='js/app.js'></script>
<script src='js/config.js'></script>
<script src='js/services/Flickr.js'></script>
<script src='js/controllers/flickr.js'></script>
当我要求它将它注入控制器时,为什么不能角度找到我定义的服务?
答案 0 :(得分:1)
使用.provider
时,您正在创建一个应该返回可配置单例的提供程序。在许多情况下,这个单例是一个单独的工厂,随后吐出一个可以使用的服务对象。
首先,当您调用它来设置配置时,您需要将其称为FlickrProvider
而不是Flickr
。
如果没有看到更多的代码,我无法判断您是否从提供商处返回new Flickr
,这是您为了按照我认为的方式使用服务实例而需要做的事情你正试图这样做。
结帐:http://docs.angularjs.org/guide/providers
基本上,为了像你想要的那样注入和使用Flickr
,你需要做这样的事情:
.provider('Flickr',function FlickrProvider(){
this.$get = function(){
return new Flickr()
}
})
function Flickr(){
this.doSomething: function(){
//do something or return something
}
}
如果您只想定义服务,而不是使其成为可配置的提供者,请改用.factory
,只需注入Flickr
即可使用。