我可以直接从AngularJS的HTML下访问模块常量

我想直接在html中使用less量常量,在控制器中使用less量常量。

例如,这是主要的应用程序模块:

angular.module('website', []) .constant('ROUTES', (function () { return { SIGN_IN: '/sign/in' } })()) .config([..., 'ROUTES', function(..., ROUTES { $routeProvider.when(ROUTES.SIGN_IN, {templateUrl: 'pages/sign_in.html', controller: 'SignInController'}); }]); 

所以这很清楚,如何使用控制器的常量。

但我怎么能这样做:

 <html ng-app="website"> <body> <a href="{{ROUTES.SIGN_IN}}">Sign in</a> </body> </html> 

重点是保持所有路线在一个地方。 所以,我能做到这一点,或者我可以select错误的方式吗?

恕我直言,更好的方法是使用$ rootScope在html中,每个作用域都从$ rootScopeinheritance,所以如果一个variables在当前作用域中不存在,则使用$ rootScope中声明的variables。

一个好的(恕我直言)方式是在运行 “阶段”

 angular.module('myApp') .run(function ($rootScope) { $rootScope.ROUTES = ROUTES }); 

我也喜欢$ rootScope的方法,但我有,在某些情况下使用filter。

作为一个简化的例子,假设在某个地方定义了一个常量CONFIG作为一个名为BuildVersion的属性的对象。 你可以创build一个像这样的filter:

 angular.module('myApp') .filter('interpolate', ['CONFIG', function (CONFIG) { return function (text) { return String(text).replace(/\%VERSION\%/mg, CONFIG.BuildVersion); }; }]); 

而在HTML中:

 <html ng-app="website"> <body> <div>{{'%VERSION%' | interpolate}}</div> </body> </html> 

要么

 <html ng-app="website"> <body> <div>{{'bla bla bla %VERSION%.' | interpolate}}</div> </body> </html> 

与其他答案略有相似,但IMO清洁剂:

 angular.module('website') .constant("ROUTES", { SIGN_IN: "/sign/in" }) .run(function ($rootScope, ROUTES) { $rootScope.ROUTES = ROUTES; }); 

和:

 <a href="{{ROUTES.SIGN_IN}}">Sign in</a> 

HTH

我们也可以使用助手,类似于ROR。

https://gist.github.com/merqlove/491023bcdd2145eef169#file-readme-md