kzen.dev
  • Întrebări
  • Tag-uri
  • Utilizatori
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 supercobra
supercobra
Question

Cum pot declara o variabilă globală în Unghiulare 2 / mașina de Scris?

As dori niste variabile pentru a fi accesibil peste tot într-un `Unghiulară 2 " în " mașina de Scris limba. Cum ar trebui să realiza acest lucru?

158 2016-03-22T15:40:43+00:00 10
 Jeff
Jeff
Întrebarea editată 12 mai 2019 в 1:01
Programare
angular
typescript
Solution / Answer
 supercobra
supercobra
23 martie 2016 в 4:43
2016-03-23T16:43:38+00:00
Mai mult
Sursă
Editează
#30204017

Aici este cea mai simplă soluție w/o "Serviciu", nici "Observator":

Pune variabile globale într-un fișier de export ei.

//
// ===== File globals.ts    
//
'use strict';

export const sep='/';
export const version: string="22.2.2";    

Pentru a utiliza globals într-un alt dosar folosi un "import" declarație: import * ca myGlobals din './globals';

Exemplu:

// 
// ===== 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

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";

         ...

        }
    }

Multumesc @eric-martinez

 snorkpete
snorkpete
Răspuns editat 6 mai 2017 в 5:13
187
0
Tim Hong
Tim Hong
7 septembrie 2016 в 2:59
2016-09-07T02:59:00+00:00
Mai mult
Sursă
Editează
#30204020

Îmi place soluția la @supercobra prea. Aș vrea să-l îmbunătățească ușor. Dacă exportați un obiect care conține toate constantele, ai putea pur și simplu utilizați es6 import modulul fără a utiliza necesită.

De asemenea, am folosit un Obiect.freeze pentru a face proprietăți devin adevărate constante. Dacă sunteți interesați de subiect, ai putea citi acest post.

// global.ts

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

Se referă modulul utilizând import.

//anotherfile.ts that refers to global constants
import { GlobalVariable } from './path/global';

export class HeroService {
    private baseApiUrl = GlobalVariable.BASE_API_URL;

    //... more code
}
Tim Hong
Tim Hong
Răspuns editat 2 aprilie 2017 в 3:38
86
0
Thierry Templier
Thierry Templier
22 martie 2016 в 3:49
2016-03-22T15:49:06+00:00
Mai mult
Sursă
Editează
#30204016

Un shared service este cea mai buna abordare

export class SharedService {
  globalVar:string;
}

Dar trebuie să fie foarte atenți atunci când înregistrarea să fie capabil de a împărtăși un singur exemplu pentru întreaga aplicație. Ai nevoie să-l definească în momentul înregistrării cererii dumneavoastră:

bootstrap(AppComponent, [SharedService]);

dar nu să-l definească din nou în furnizori atribute ale componentelor:

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

În caz contrar, un nou exemplu de serviciu va fi creat pentru componente și sub-componente.

Puteți avea o privire la această întrebare în ceea ce privește modul de injectare dependență ierarhică și injectoarele de muncă în Angular2:

  • https://stackoverflow.com/questions/34804298/whats-the-best-way-to-inject-one-service-into-another-in-angular-2-beta/34807397

Se poate observa că puteți defini, de asemenea, `Observabile proprietăți în serviciul de a notifica părțile din cererea dumneavoastră atunci când global properties schimba:

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);
  }
}

A se vedea această întrebare pentru mai multe detalii:

  • https://stackoverflow.com/questions/34376854/delegation-eventemitter-or-observable-in-angular2/35568924
 Community
Community
Răspuns editat 23 mai 2017 в 12:18
53
0
G&#252;nter Z&#246;chbauer
Günter Zöchbauer
22 martie 2016 в 3:41
2016-03-22T15:41:49+00:00
Mai mult
Sursă
Editează
#30204015

A se vedea de exemplu https://stackoverflow.com/questions/35993778/angular-2-implementation-of-shared-services

@Injectable() 
export class MyGlobals {
  readonly myConfigValue:string = 'abc';
}

@NgModule({
  providers: [MyGlobals],
  ...
})

class MyComponent {
  constructor(private myGlobals:MyGlobals) {
    console.log(myGlobals.myConfigValue);
  }
}

sau furnizează valori individuale

@NgModule({
  providers: [{provide: 'myConfigValue', useValue: 'abc'}],
  ...
})

class MyComponent {
  constructor(@Inject('myConfigValue') private myConfigValue:string) {
    console.log(myConfigValue);
  }
}
 Demodave
Demodave
Răspuns editat 15 februarie 2018 в 2:46
37
0
 gradosevic
gradosevic
9 octombrie 2016 в 6:17
2016-10-09T18:17:37+00:00
Mai mult
Sursă
Editează
#30204022

Crea Globals clasa in app/globals.ts:

import { Injectable } from '@angular/core';

Injectable()
export class Globals{
    VAR1 = 'value1';
    VAR2 = 'value2';
}

În componentă:

import { Globals } from './globals';

@Component({
    selector: 'my-app',
    providers: [ Globals ],
    template: `<h1>My Component {{globals.VAR1}}<h1/>`
})
export class AppComponent {
    constructor(private globals: Globals){
    }
}

Notă: puteți adăuga Globals furnizor de servicii direct la modulul în loc de componentă, și nu veți avea nevoie să adăugați ca un furnizor pentru fiecare componentă în acel modul.

@NgModule({
    imports: [...],
    declarations: [...],
    providers: [ Globals ],
    bootstrap: [ AppComponent ]
})
export class AppModule {
}
15
0
Timo B&#228;hr
Timo Bähr
23 ianuarie 2017 в 2:55
2017-01-23T14:55:30+00:00
Mai mult
Sursă
Editează
#30204024

IMHO pentru Angular2 (v2.2.3) cel mai bun mod este de a adăuga servicii care conțin variabila globală și le injecta în componente, fără furnizorilor de tag-ul în interiorul @Component de adnotare. Prin acest fel aveți posibilitatea de a partaja informații între componente.

Un eșantion de servicii care detine o variabilă globală:

import { Injectable } from '@angular/core'

@Injectable()
export class SomeSharedService {
  public globalVar = '';
}

Un eșantion componentă care actualizări valoarea de variabile globale:

import { SomeSharedService } from '../services/index';

@Component({
  templateUrl: '...'
})
export class UpdatingComponent {

  constructor(private someSharedService: SomeSharedService) { }

  updateValue() {
    this.someSharedService.globalVar = 'updated value';
  }
}

Un eșantion componentă care citește valoarea de variabile globale:

import { SomeSharedService } from '../services/index';

@Component({
  templateUrl: '...'
})
export class ReadingComponent {

  constructor(private someSharedService: SomeSharedService) { }

  readValue() {
    let valueReadOut = this.someSharedService.globalVar;
    // do something with the value read out
  }
}

Notă: furnizorii: [ SomeSharedService ]ar trebui să **nu** fi adăugate la@Componentde adnotare. Adăugând această linie de injecție vă va oferi întotdeauna aceeași instanță de SomeSharedService. Dacă adăugați o linie proaspăt creat exemplu este injectat.

11
0
Mahdi Jadaliha
Mahdi Jadaliha
30 iunie 2016 в 5:16
2016-06-30T17:16:54+00:00
Mai mult
Sursă
Editează
#30204018

Eu nu't știu cel mai bun mod, dar cel mai simplu mod dacă doriți să definiți o variabilă globală în interiorul unei componente este de a utiliza "fereastra" variabilă pentru a scrie astfel:

fereastră.GlobalVariable = "ce s-a!"

nu't nevoie pentru a trece la bootstrap sau de import-l în alte locuri, și este accesibil la nivel global pentru toate JS (nu numai unghiulare 2 componente).

8
0
Guilherme Teubl
Guilherme Teubl
23 septembrie 2016 в 10:48
2016-09-23T22:48:52+00:00
Mai mult
Sursă
Editează
#30204021

Ca's modul în care am folosi-o:

global.ts

export var server: string = 'http://localhost:4200/';
export var var2: number = 2;
export var var3: string = 'var3';

să-l folosească doar de import de genul asta:

import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs/Rx';
import * as glob from '../shared/global'; //<== HERE

@Injectable()
export class AuthService {
    private AuhtorizationServer = glob.server
}

EDITAT: Ia o pauza "_" prefixate ca recomandat.

 Ferie
Ferie
Răspuns editat 25 aprilie 2019 в 5:21
5
0
 0x1ad2
0x1ad2
14 decembrie 2016 в 2:01
2016-12-14T14:01:10+00:00
Mai mult
Sursă
Editează
#30204023

Cred că cel mai bun mod este de a împărtăși un obiect cu variabilele globale de-a lungul cererea dumneavoastră de exportul și importul de unde vrei.

În primul rând a crea un nou .ts fișier de exemplu globals.ts și declare un obiect. I-am dat o ** Obiect tip dar de asemenea, ai putea folosi un orice tip sau {}

export let globalVariables: Object = {
 version: '1.3.3.7',
 author: '0x1ad2',
 everything: 42
};

După care importa

import {globalVariables} from "path/to/your/globals.ts"

Și să-l utilizați

console.log(globalVariables);
 Community
Community
Răspuns editat 23 mai 2017 в 11:33
4
0
 Zolcsi
Zolcsi
20 iulie 2016 в 11:50
2016-07-20T11:50:23+00:00
Mai mult
Sursă
Editează
#30204019

Îmi place răspunsul de @supercobra, dar mi-ar folosi cuvântul cheie const cum este în ES6 deja disponibile:

//
// ===== File globals.ts    
//
'use strict';

export const sep='/';
export const version: string="22.2.2"; 
3
0
Comunități asemănătoare 1
TypeScript Moldova
TypeScript Moldova
19 utilizatori
Comunicăm pe teme de TypeScript și static typing. Общаемся на темы TypeScript и статической типизации.
Deschide telegram
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
Utilizatori
Toate
Nou
Populare
1
Daniel Gogov
Înregistrat 6 zile în urmă
2
工藤 芳則
Înregistrat 1 săptămână în urmă
3
Ирина Беляева
Înregistrat 2 săptămâni în urmă
4
Darya Arsenyeva
Înregistrat 2 săptămâni în urmă
5
anyta nuam-nuam (LapuSiK)
Înregistrat 2 săptămâni în urmă
DA
DE
EL
ES
FR
ID
IT
JA
KO
LT
LV
NL
NO
PT
RO
RU
SK
TR
ZH
© kzen.dev 2023
Sursă
stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire