如何在Angular UI Router中访问自定义常量?
在AngularJS路由配置中访问自定义常量的实现方法
针对你的场景,其实有两种可行的方案,结合你已经定义好的常量和服务,我给你详细拆解下:
方案1:直接在路由配置的config阶段注入常量(推荐)
AngularJS里的constant是少数可以在config阶段直接注入的对象之一,刚好你的opsConstants就是用constant定义的,所以可以直接在路由配置的config函数里注入它,不用绕路走服务。
举个具体的代码示例,你只需要修改路由配置部分:
// 基于你已有的应用模块定义,添加路由配置 opsApp.config(['$stateProvider', 'opsConstants', function($stateProvider, opsConstants) { $stateProvider .state('exampleState', { url: '/example/' + opsConstants.GID, // 直接用常量拼接URL templateUrl: 'views/example.html', controller: 'ExampleController', // 也可以在resolve里传递常量给控制器 resolve: { currentGid: function() { return opsConstants.GID; } } }); }]);
这样在路由配置的任何地方(比如URL拼接、resolve逻辑)都能直接访问opsConstants.GID了,非常直接高效。
方案2:通过OpsConstantService在路由的resolve中获取常量
如果你因为某些原因必须通过你定义的OpsConstantService来获取常量,要注意:AngularJS的服务(service)不能在config阶段注入,只能在run阶段或者控制器、resolve这类可注入运行时依赖的地方使用。
所以可以在路由的resolve块中注入这个服务,把常量传递给后续的控制器:
// 路由配置部分 opsApp.config(['$stateProvider', function($stateProvider) { $stateProvider .state('exampleState', { url: '/example', templateUrl: 'views/example.html', controller: 'ExampleController', resolve: { // 注入服务并返回常量对象 opsConsts: ['OpsConstantService', function(OpsConstantService) { return OpsConstantService.OPSCONSTANTS; }] } }); }]); // 对应的控制器 opsApp.controller('ExampleController', ['opsConsts', function(opsConsts) { console.log('当前GID:', opsConsts.GID); // 输出 UA1 }]);
这种方式适合需要在服务层做额外处理的场景,但如果只是单纯获取常量,方案1会更简洁。
需要注意的是,你现有的常量和服务定义完全不需要修改,只需要按照上面的方式在路由配置中注入对应的依赖即可。
内容的提问来源于stack exchange,提问作者StrugglingCoder
相关产品推荐
相关产品推荐

