2016-11-02 5 views
0

Я использую следующий вертушку из ng2-admin темы:Использование вертушка в качестве глобальной службы

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

Таким образом, для каждого компонента я должен импортировать его, и я хочу, чтобы избежать этого, поскольку многие компоненты будут использовать его. Как я могу сделать его доступным для всего приложения?

+0

Импорт из каждого потребителя имеет некоторые преимущества, в основном, вызывая зависимость. Представьте себе поиск и замену этого позже без 'import {SpinnerService} from ...' line. – ssube

+0

Но служба spinner специально в приложении, как правило, одинакова для всех компонентов. Если он изменится, все приложение будет обновлено – FacundoGFlores

ответ

1

Вы можете создать базовый компонент и положить поглотитель как

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

затем использовать его:

this.spinnerService.show() 

ReflectiveInjector можно найти внутри @ угловой/ядра

Документы: https://angular.io/docs/ts/latest/api/core/index/ReflectiveInjector-class.html

+0

, что такое appInjector? откуда вы его импортируете? – FacundoGFlores

+0

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

+0

@FacundoGFlores Я обновил ответ, помните, что это шаблон локатора сервисов, только для вашей информации. –