angularjs - Angular "Unkown Provider"- 如何在routeProvider配置中使用工厂?

标签 angularjs angularjs-service ngroute angularjs-provider

在使用 Angular 时,我尝试更好地理解如何使用工厂、服务、常量、路由和其他核心概念。因此,我使用 Node、Express、Jade 和 Angular 构建了一个简单的演示应用程序。

现在我想在routeProvider配置中使用一个值。我创建了一个常量,效果很好。为了使其在将来的使用中更加灵活,我建立了一个工厂,但是由于“未知的提供者”而失败了。这是 Angular 中实例化顺序的问题吗?为什么我无法将工厂注入(inject)到 .config 部分?在我尝试使用服务而不是工厂进行相同的操作之前,出现了相同的错误。希望我没有犯一个简单的拼写错误或语法错误,到目前为止我还没有发现任何错误。

angular
  .module('main', [
    'ngRoute'
  ])

  .constant('cApp', {
      'defaultPath': '/home'
  })

  .factory('svcState', function(){
      var appState;

      function getState(){
          return appState;
      }

      function init() {
          appState='/home';
      }

      init();

      return{
          getState: getState
      };
  })

  .config(function($routeProvider, svcState, cApp){

      $routeProvider
          .when('/home', {
              templateUrl: "partials/home"
          })
          .when('/info', {
              templateUrl: "partials/info"
          })
          .otherwise({
              //redirectTo: cApp.defaultPath  // this works fine
              redirectTo: svcState.getState   // this fails with "Error: [$injector:unpr] Unknown provider: svcState"
          })

      })

;

最佳答案

svcState 应该是提供者而不是服务。因为服务/工厂在配置阶段内无法访问。您需要将 svcState 的实现更改为提供程序,以便它在 Angular 的配置 block 中可用。

提供程序实现后,您可以在配置 block 中使用 svcStateProvider 注入(inject)该提供程序。

.config(function($routeProvider, svcStateProvider, cApp){

  $routeProvider
      .when('/home', {
          templateUrl: "partials/home"
      })
      .when('/info', {
          templateUrl: "partials/info"
      })
      .otherwise({
          redirectTo: svcStateProvider.getState() //<--change herer
      })

  }) 

看看this answer了解有关提供商的更多信息

关于angularjs - Angular "Unkown Provider"- 如何在routeProvider配置中使用工厂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30208593/

相关文章:

javascript - ngRoute 不工作

javascript - 将 Controller 传递给 angularJS 中的指令。给出未定义的错误

javascript - 我必须对一堆 div 进行 ng-repeat。我怎样才能做到这一点

javascript - 在 Controller 和指令之间传递服务

javascript - 为什么我应该选择在 AngularJS 中使用服务而不是工厂?

javascript - 自定义服务中的 Angular 未知提供者错误

javascript - ngroute 后指令加载不正确

javascript - 在angularjs中为这个HTTP GET添加HTTP基本认证

javascript - Angular 服务被注入(inject)到 Controller 中,但它显示为一个空对象

javascript - 在 $routeProvider 的解析功能中使用 promise 链