Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

2.2K
Views
¿Cómo puedo declarar una variable global en Angular 2 / Typescript?

Me gustaría que algunas variables fueran accesibles en todas partes en un Angular 2 en el lenguaje Typescript . ¿Cómo debo hacer para lograr esto?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Aquí está la solución más simple sin Service ni Observer :

Coloque las variables globales en un archivo y expórtelas.

 // // ===== File globals.ts // 'use strict'; export const sep='/'; export const version: string="22.2.2";

Para usar globales en otro archivo, use una declaración de import : import * as myGlobals from 'globals';

Ejemplo:

 // // ===== File heroes.component.ts // import {Component, OnInit} from 'angular2/core'; import {Router} from 'angular2/router'; import {HeroService} from './hero.service'; import {HeroDetailComponent} from './hero-detail.component'; import {Hero} from './hero'; import * as myGlobals from 'globals'; //<==== this one (**Updated**) export class HeroesComponent implements OnInit { public heroes: Hero[]; public selectedHero: Hero; // // // Here we access the global var reference. // public helloString: string="hello " + myGlobals.sep + " there"; ... } }

Gracias @eric-martinez

over 4 years ago · Santiago Trujillo Report

0

También me gusta la solución de @supercobra. Solo me gustaría mejorarlo un poco. Si exporta un objeto que contiene todas las constantes, simplemente puede usar es6 para importar el módulo sin usar require .

También usé Object.freeze para hacer que las propiedades se convirtieran en verdaderas constantes. Si te interesa el tema, puedes leer este post .

 // global.ts export const GlobalVariable = Object.freeze({ BASE_API_URL: 'http://example.com/', //... more of your variables });

Consulte el módulo usando import.

 //anotherfile.ts that refers to global constants import { GlobalVariable } from './path/global'; export class HeroService { private baseApiUrl = GlobalVariable.BASE_API_URL; //... more code }
over 4 years ago · Santiago Trujillo Report

0

Un servicio compartido es el mejor enfoque

 export class SharedService { globalVar:string; }

Pero debe tener mucho cuidado al registrarlo para poder compartir una sola instancia para toda su aplicación. Debe definirlo al registrar su aplicación:

 bootstrap(AppComponent, [SharedService]);

Pero no volver a definirlo dentro de los atributos de providers de sus componentes:

 @Component({ (...) providers: [ SharedService ], // No (...) })

De lo contrario, se creará una nueva instancia de su servicio para el componente y sus subcomponentes.

Puede echar un vistazo a esta pregunta sobre cómo funcionan la inyección de dependencia y los inyectores jerárquicos en Angular 2:

  • ¿Cuál es la mejor manera de inyectar un servicio en otro en angular 2 (Beta)?

Debe notar que también puede definir propiedades Observable en el servicio para notificar partes de su aplicación cuando cambien sus propiedades globales:

 export class SharedService { globalVar:string; globalVarUpdate:Observable<string>; globalVarObserver:Observer; constructor() { this.globalVarUpdate = Observable.create((observer:Observer) => { this.globalVarObserver = observer; }); } updateGlobalVar(newValue:string) { this.globalVar = newValue; this.globalVarObserver.next(this.globalVar); } }

Vea esta pregunta para más detalles:

  • Delegación: EventEmitter u Observable en Angular
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!