我在向AngularFire应用的控制器中注入服务时遇到了一些麻烦。
这是我试图将user
注入的控制器(由Yeoman生成器包含):
angular.module('myYoApp')
.controller('ChatCtrl', function ($scope, user, Ref, $firebaseArray, $timeout) { ....
产生Unknown provider
错误:
angular.js:12798 Error: [$injector:unpr] Unknown provider: userProvider <- user <- ChatCtrl
奇怪的是,它在我的自定义控制器中工作得很好,允许用户在关联的视图中访问。
angular.module('myYoApp')
.controller('myCtrl', function ($scope, user, Auth, Ref, $firebaseArray, $firebaseObject, $timeout) { ....
我不知道为什么user
服务在我的自定义控制器中是可注入的,而不是在约曼生成的ChatCtrl
中。我也看了整个项目,似乎找不到user
服务是从哪里来的。但如果我的自定义服务可以使用它,它显然在应用程序的某个地方。
我也尝试过使用$user
代替user
,但这并没有解决它。谢谢你的帮助!
好的。我设法解决了这个问题。这是routes.js
的一个疏忽。Yeoman angularfire-generator在路由中添加了内置的安全/认证功能,可以很容易地阻止它被访问,除非用户已经登录。因此,如果路由使用$routeProvider.whenAuthenticated
代替$routeProvider.when
,则user
服务只能被注入到控制器中。
常规的不安全路由是这样的:
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
安全路由是这样的:
$routeProvider
.whenAuthenticated('/chat', {
templateUrl: 'views/chat.html',
controller: 'ChatCtrl'
})