如何注入' $ urlRouterProvider'进工厂?

时间:2014-10-21 16:00:51

标签: angularjs angular-ui-router

我已关注此帖How inject $stateProvider in angular application?,我已设法弄清楚如何使用'$stateprovider',但现在我遇到'$urlRouterProvider'问题。

这是否意味着我不能将'$urlRouterProvider'注入控制器,它应该只注入配置?

我非常感谢任何有关此问题的帮助。

1 个答案:

答案 0 :(得分:0)

$urlRouterProvider代码的片段非常狭窄:

$UrlRouterProvider.$inject = ['$locationProvider', '$urlMatcherFactoryProvider'];
function $UrlRouterProvider( $locationProvider, $urlMatcherFactory) {

// I. config
// these are CONFIGURATION methods 
// we can access in .config() phase
....

this.rule = function (rule) {
  ...
}
...
this.when = function (what, handler) {
  ...
}

...
// II. application run
// this is the service/factory/configured provider 
// injected in the .run() phase via IoC

this.$get = $get;
$get.$inject = ['$location', '$rootScope', '$injector', '$browser'];
function $get( $location, $rootScope, $injector, $browser) {
  ...
  return {
    sync: function() {
      ...
    },
    listen: function() {
      ...
}

这就是答案。在配置中,我们可以访问提供程序$urlRouterProvider的配置方法。稍后,在应用程序运行阶段,我们的服务/工厂通过IoC提供已配置 $get()

的结果

有关详细信息,请参阅:

Configuring Providers

  

您可能想知道为什么如果工厂,价值等更容易,有人会费心使用提供方法设置一个成熟的提供商。答案是提供商允许大量配置。我们已经提到过,当您通过提供程序(或Angular为您提供的任何快捷方式)创建服务时,您将创建一个新的提供程序来定义该服务的构造方式。我没有提到的是,这些提供程序可以注入应用程序的配置部分,以便您可以与它们进行交互!

     

首先,Angular分两个阶段运行您的应用程序 - 配置和运行阶段。正如我们所见,配置阶段是您可以根据需要设置任何提供商的地方。这也是设置指令,控制器,过滤器等的地方。正如您可能猜到的,运行阶段是Angular实际编译DOM并启动应用程序的地方。

如果您需要访问$stateProvider$routeProvider配置甚至更晚......有办法...检查此plunker。很难说这是有角度的方式......但它正在发挥作用。在这里查看