2016-11-02 4 views
0

J'utilise la fileuse suivante du thème ng2-admin:En utilisant un tourbillonnement service global

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

@Injectable() 
export class BaThemeSpinner { 

    private _selector:string = 'preloader'; 
    private _element:HTMLElement; 

    constructor() { 
    this._element = document.getElementById(this._selector); 
    } 

    public show():void { 
    this._element.style['display'] = 'block'; 
    } 

    public hide(delay:number = 0):void { 
    setTimeout(() => { 
     this._element.style['display'] = 'none'; 
    }, delay); 
    } 
} 

Donc, pour chaque composant, je dois l'importer, et je veux éviter, parce que de nombreux composants vont l'utiliser. Comment puis-je le rendre disponible pour l'ensemble de l'application?

+0

L'importation de chaque consommateur a quelques avantages, appelant principalement la dépendance. Imaginez que vous cherchiez et que vous le remplaciez plus tard sans ligne 'import {SpinnerService} from ...'. – ssube

+0

Mais le service spinner spécifiquement dans une application est généralement le même pour tous les composants. Si cela change alors l'application entière serait mise à jour – FacundoGFlores

Répondre

1

Vous pouvez créer un composant de base et de mettre un getter comme

export class BaseView { 

    protected _injector:Injector; 

    protected _spinnerService:SpinnerService; 

    constructor() { 
     let providers = ReflectiveInjector.resolve([SpinnerService]); 
     this._injector = ReflectiveInjector.fromResolvedProviders(providers); 
    } 

    get spinnerService(): SpinnerService { 
     if (this._spinnerService == null) { 
      this._spinnerService = this._injector.get(SpinnerService); 
     } 
     return this._spinnerService; 
    } 
} 

puis utilisez:

this.spinnerService.show() 

ReflectiveInjector se trouvent à l'intérieur de @ angulaire/noyau

Docs: https://angular.io/docs/ts/latest/api/core/index/ReflectiveInjector-class.html

+0

ce que appInjector est? D'où l'importez-vous? – FacundoGFlores

+0

@FacundoGFlores 'import {Injector} de '@ angular/core';' –

+0

@FacundoGFlores J'ai mis à jour la réponse, rappelez-vous qu'il s'agit d'un modèle de localisateur de service, juste pour votre information. –