Búsqueda de sitios web

typescript - Inyectando LoadingController en método estático en angular 2


He intentado inyectar LoadingController en un método estático, pero no se está inyectando. ¿Es posible inyectar LoadingController en un método estático?

He probado el siguiente código:

import { LoadingController, Loading } from 'ionic-angular';
import { Inject } from '@angular/core'

export class Commons {

    @Inject(LoadingController)
    static showLoadingMask( loadingText: string ) {
        //Getting Null
        let loadCtrl: LoadingController;
    }
}

El otro código que he intentado es:

import { LoadingController, Loading } from 'ionic-angular';
import { Inject } from '@angular/core'

export class Commons {
    static showLoadingMask( loadingText: string, @Inject(LoadingController) loadCtrl ) {
        //Getting Null
        if( loadCtrl ) {
            //Null
        } else {
            //Always executing else
        }
    }

}

No quiero tener un constructor en esta clase, ya que solo quiero proporcionar métodos estáticos que sean reutilizables en el proyecto para tareas comunes.

Respuesta #1

No estoy seguro de si esta es la mejor manera de hacerlo, pero puedes enviar una referencia al injector y usarla para obtener las instancias de los proveedores. Por ejemplo

import { LoadingController, Loading } from 'ionic-angular';
import { Injector } from '@angular/core'

export class Commons {
    static showLoadingMask(injector: Injector, loadingText: string ) {
        let loadCtrl: LoadingController = this.injector.get(LoadingController);
    }
}

Y en el componente donde quieras usarlo, sería así

import { Component, Injector } from '@angular/core';
// ...

@Component({
    selector: 'page-home',
    templateUrl: 'home.html'
})
export class HomePage {

    constructor(..., public injector: Injector) { ... }

    public yourMethod(): void {
      Commons.showLoadingMask(this.injector, 'Loading...');
    }    
}