当前位置:  开发笔记 > 前端 > 正文

注入与Angular 2的全局静态类

如何解决《注入与Angular2的全局静态类》经验,为你挑选了1个好方法。

我正在创建一个项目,我需要一个"常量"类来包含一些配置值.以下是此类的摘录:

export class Constants
{
    static Configuration = class
    {
        static CookieName:string = 'etl_language';
    };

    ...

    static View = class
    {
        static Militaries:string = 'militaries';
        static Mutants:string = 'mutants';
        static Objects:string = 'objects';
        static Scientists:string = 'scientists';
    };
}

当我在Angular 2的组件中时,我可以通过导入它来使用该类:

import {Constants} from "../../misc/constants";

然后,只需参考它:

this.cookieName = Constants.Configuration.CookieName;

它工作得很好,但我觉得我应该使用Angular 2的依赖注入引擎在构造函数中注入对该类的引用,但它似乎有点矫枉过正.但是,我觉得我违反了做事的"角度方式",所以我不知道我是否可以坚持我的解决方案,或者我是否必须使用DI.

有什么建议?



1> Zyzle..:

我可能建议做的是将Constants类更改为只读属性并Providers[]从中创建一个类似的属性

@Injectable()
public class ConfigurationConstants() {
  private _cookieName:string = 'etl_language';
  ...
  get cookieName():string {
    return this._cookieName;
  }
  ...
}

export var CONSTANTS_PROVIDERS:Provider[] = [
  provide(ConfigurationConstants, {useClass: ConfigurationConstants}),
  provide(ViewConstants, {useClass: ViewConstatns})
];

然后,您可以将这些提供程序引导到应用程序的顶级注入器中,使它们可以在任何您需要的地方使用.

import {CONSTANTS_PROVIDERS} from './constants';

bootstrap(App, [CONSTANTS_PROVIDERS])
  .catch(err => console.error(err));

这是一个演示的插图:http://plnkr.co/edit/RPjDxoIZ8wLY3DDIdhJF

编辑2: Plunker现在回来了,我已经更新了这个例子

编辑: Plunkr现在已经死了所以我无法更新它,但在我的评论中我的意思是这样的(我没有测试过这个,但它应该工作):

public class SubConstants() {
  private _someString:string = 'Some String';
  ...
  get someString():string {
    return this._someString;
  }
  ...
}

@Injectable()
public class ConfigurationConstants() {
  private _cookieName:string = 'etl_language';
  private _subConstants:SubConstants = new SubConstants();
  ...
  get cookieName():string {
    return this._cookieName;
  }

  get subConstants():SubConstants {
    return this._subConstants;
  }
  ...
}

// ... this would allow you to then do:
confConstants.subConstants.someString
// assuming you injected ConfigurationConstants as confConstants

同样,这是比你对内部类的建议更多的代码,所以它可能取决于你喜欢的.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有