如何将参数从.run传递给.config?

时间:2017-06-28 05:41:18

标签: javascript angularjs

我在我的angularjs ui-route项目上工作。 在.run()核心中,我将一些变量放在名为clientid的{​​{1}}中。

在某些时候,我需要在$rootScope核心中使用存储变量。

我知道我无法在.config()核心中使用$rootScope服务。

所以我的问题是如何将.config()变量从clientid传递到$rootScope。也许我可以使用任何其他服务?

1 个答案:

答案 0 :(得分:3)

当然,使用$ rootScope将是错误的决定。因为没有人喜欢污染全球范围,还有其他原因。您可以考虑创建一个名为settings的常量,并在任何角度组件中使用它,例如.run块,config阶段,serviceprovider等等。

angular.module('mainModule').constant('settings', {
   clientId: 1123 //some inital value
})

虽然您可以从配置阶段覆盖此值。

angular.module('mainModule').config(['settings', configFn])

function configFn(settings){
    //routes registers here

    //other awesome stuf

    //set clientId here
    //Assuming your clientId will be available, no async operation.
    if(someValue === 1)
      settings.clientId = 'asd12';  
    else
      settings.clientId = 'asd34';  
}

此后,您可以在run

中使用该常量
angular.module('mainModule').run(['settings', runBlock])

function runBlock(settings){
   console.log(settings);
}
  

注意:选择constant背后的原因是,这种风味可以在任何角度组件中以注射形式提供。