未知的提供商:userProvider为现有的约曼AngularFire用户服务

Unknown provider: userProvider for existing Yeoman AngularFire user service

本文关键字:用户服务 AngularFire 提供商 userProvider 未知      更新时间:2023-09-26

我在向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'
      })