在Angular UI路由器中解决$ state.go的依赖关系

时间:2014-12-24 04:03:08

标签: javascript angularjs angular-ui angular-services

我有一个使用$state.go跳转到状态的提供程序配置。当我使用$state作为函数参数时,它可以工作,但当我尝试修改函数参数以支持缩小时,例如

.provider('Navigation',["$stateProvider","$state",function($stateProvider,$state)

然后我得到以下解决依赖性错误:

Uncaught Error: [$injector:modulerr] Failed to instantiate module apfPrototypeJs due to:
Error: [$injector:unpr] Unknown provider: $state

如何规避这个问题?

1 个答案:

答案 0 :(得分:1)

您只能在提供程序中注入providers,因为此时尚未实例化服务,并且因为提供程序方法特别用于配置,所以只能在应用程序的配置阶段访问它们,它能够注入任何服务是没有意义的。但是你可以在通过$get属性定义的提供者的构造函数中注入任何服务(而不是提供者)。

.provider('Navigation',["$stateProvider",function($stateProvider) { //Inject provider here

   this.$get = ["$state", function($state){ //Inject $state here
       console.log($state) 
   }]
}]);

作为替代语法(使用$ inject支持缩小),您可以: -

.provider('Navigation', function(){

    this.$get  = navigationService;

    navigationService.$inject = ['$state'];

    function navigationService($state) {
      console.log($state)
    }
}]);