【问题标题】:Angular Provider access in ui routerui路由器中的Angular Provider访问
【发布时间】:2018-04-25 11:14:53
【问题描述】:

我尝试将service 更改为provider 以获得访问config 阶段。 provider 在其他模块中。

var app = angular.module('ops.services');

app.constant('opsConstants', {
    GID: 'UA1'
});

app.provider('OpsConstantService', OpsConstantService);

OpsConstantService.$inject = ['opsConstants'];

function OpsConstantService(opsConstants) {
    return {
        $get:function() {
            return {
                OPSCONSTANTS : opsInsightConstants,
            }
        }
    }
}

My app module 依赖相同,并且提供了DI

var opsApp = angular.module('opsApp', ['ui.router',  'ops.services', 'angular-momentjs']);

现在,在我的应用程序中,routing 我需要访问常量值。

opsApp.config(routerConfig);

routerConfig.$inject = ['$stateProvider', '$urlRouterProvider','OpsConstantServiceProvider'];

function routerConfig($stateProvider, $urlRouterProvider,OpsConstantServiceProvider) {
    $urlRouterProvider.otherwise("/home/dashboard/");

    $stateProvider
        .state('Modal', {
            url: .....

但如果我尝试记录OpsConstantServiceProvider.OPSCONSTANTS,它是未定义的。

为什么会这样?

我做错了什么?

【问题讨论】:

  • 如果你需要一个常量,就请求一个常量。 app.provider => app.constant('OpsConstant', {const1: 1, const2: 2}) 然后从那里访问它。
  • @Vitalii 还有更多的constant 函数。这只是部分示例。
  • 当然。但是常量并不意味着不是一个对象。将常量分组到正确命名的对象(一、二、五、无米)中,并使用 app.constant 在 Angular 的 DI 中注册这些对象。

标签: javascript angularjs angular-ui-router


【解决方案1】:

这行得通:

function OpsConstantService(opsConstants) {
    return {
        OPSCONSTANTS : opsInsightConstants,
        $get:function() {
            return {
                // something
            }
        }
    }
}

app.config(['OpsConstantServiceProvider', function(OpsConstantServiceProvider) {
  console.log(OpsConstantServiceProvider.OPSCONSTANTS);
}]);

但是,这不好) 其实你想做什么?收集常量并创建一个大对象? 然后你可以这样做:

app.constant('test1', {test: 1});
app.constant('test2', {test: 2});
app.constant('test3', {test: 3});
app.constant('commons', {});

app.config(['test1', 'test2', 'test3', 'commons', function(test1, test2, test3, commons) {
  commons.test1 = test1;
  commons.test2 = test2;
  commons.test3 = test3;
}]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多