Angular 4/5/6 Global Variables

前端 未结 4 1904
孤城傲影
孤城傲影 2020-11-27 10:43

I really struggle with creating global variables in my Angular 2 application.

I already googled and read many posts on StackOverflow on this for the last 3 hours, h

4条回答
  •  甜味超标
    2020-11-27 11:18

    You can access Globals entity from any point of your App via Angular dependency injection. If you want to output Globals.role value in some component's template, you should inject Globals through the component's constructor like any service:

    // hello.component.ts
    import { Component } from '@angular/core';
    import { Globals } from './globals';
    
    @Component({
      selector: 'hello',
      template: 'The global role is {{globals.role}}',
      providers: [ Globals ] // this depends on situation, see below
    })
    
    export class HelloComponent {
      constructor(public globals: Globals) {}
    }
    

    I provided Globals in the HelloComponent, but instead it could be provided in some HelloComponent's parent component or even in AppModule. It will not matter until your Globals has only static data that could not be changed (say, constants only). But if it's not true and for example different components/services might want to change that data, then the Globals must be a singleton. In that case it should be provided in the topmost level of the hierarchy where it is going to be used. Let's say this is AppModule:

    import { Globals } from './globals'
    
    @NgModule({
      // ... imports, declarations etc
      providers: [
        // ... other global providers
        Globals // so do not provide it into another components/services if you want it to be a singleton
      ]
    })
    

    Also, it's impossible to use var the way you did, it should be

    // globals.ts
    import { Injectable } from '@angular/core';
    
    @Injectable()
    export class Globals {
      role: string = 'test';
    }
    

    Update

    At last, I created a simple demo on stackblitz, where single Globals is being shared between 3 components and one of them can change the value of Globals.role.

提交回复
热议问题