Javascript 在控制器angularjs之间传递常量值

Javascript 在控制器angularjs之间传递常量值,javascript,angularjs,single-page-application,Javascript,Angularjs,Single Page Application,在我的项目中,在我的两个模块中,我有一个常见的常量值——我希望有一个设计,我只需要在一个模块中定义它,然后将该值传递给另一个模块。我该怎么办- 模块1类似于 var myApp=angular.module('myApp',['ui.router']); myApp.constant('constVar','http://45.26365.23/mydata/');一种简单的方法是在模块外定义常量: var myConstant = 'http://45.26365.23/mydata/';

在我的项目中,在我的两个模块中,我有一个常见的常量值——我希望有一个设计,我只需要在一个模块中定义它,然后将该值传递给另一个模块。我该怎么办- 模块1类似于

var myApp=angular.module('myApp',['ui.router']);

myApp.constant('constVar','http://45.26365.23/mydata/');一种简单的方法是在模块外定义常量:

var myConstant = 'http://45.26365.23/mydata/';
var myApp = angular.module('myApp', ['ui.router']);
myApp.constant('constVar', myConfig.myConstant);

var Dashboardapp =angular.module('Dashboardapp', ['ui.router']);
Dashboardapp.constant('constVar', myConfig.myConstant);
或者,如果您有更多的常量或其他常规数据,可能会更好:

var myConfig = {
    myConstant : 'http://45.26365.23/mydata/'
    // other data
}
然后在模块中调用它:

var myConstant = 'http://45.26365.23/mydata/';
var myApp = angular.module('myApp', ['ui.router']);
myApp.constant('constVar', myConfig.myConstant);

var Dashboardapp =angular.module('Dashboardapp', ['ui.router']);
Dashboardapp.constant('constVar', myConfig.myConstant);
另一种可能是只在一个模块(即您的主模块)中定义它,然后将它注入到其他模块中:

var myApp = angular.module('myApp', ['ui.router']);
myApp.constant('constVar', 'http://45.26365.23/mydata/');

var Dashboardapp =angular.module('Dashboardapp', ['ui.router', 'myApp']);
Dashboardapp.constant('constVar', myApp.constant);

你可以在需要的地方调用常量,而不是最后一行。

你可以随时使用随附的“常量”

import * as angular from 'angular';

export default angular
  .module('app.constants.foo', [])
  .constant('fooAction', Object.freeze({
    name: value
  }))
  .name;

然后注入命名常量。因此,它可以在应用程序中的任何地方访问(更重要的是,它是不可变的(大部分))。

对于记录,谷歌内部风格指南说“不要在范围上定义变量。”(它实际上明确地说)。请注意,这意味着,$rootScope(如果您这样做了,您的代码肯定会在审查中被踢回去,并带有非常难看的“THIS IS BAD”注释)


只需在比两个模块更高的级别上定义它,通常是在应用程序级别(Angular 1.x在应用程序配置API中为常量定义了一个可配置的位置,您可能需要查找它,这很有用,因为它实际上强制了常量)。您也可以只使用在没有任何模块中定义的类(只使用静态导入和使用的顶级类),或者您可以定义另一个您注入的模块(对于一些简单的常量来说,这可能是多余的)

您可以将该常量放入
$rootScope
&在您的任何控制器中访问它app@AgamBanga我不确定
$rootScope
是否可以在应用程序之间共享常数。创建一个包含所有常数的单独模块,并在需要时/在任何地方插入该模块如何。谢谢,这节省了我的时间-新手,在这上面浪费了两天..呸@GiovaniVercauteren是的,这将是一种增强的、更优雅的方法。谢谢你分享你的想法!看来我们都在考虑类似的方法+感谢您的解释和提及谷歌风格指南,它强调好的和坏的做法。