Как внедрить сервис в модуль в моем случае?

Я пытаюсь внедрить старую службу angular 1.5 в мой модуль angular 4 в моем гибридном приложении angular 1.5/4.

MyService использует статический метод, потому что, если я сделаю его общедоступным, у меня не будет возможности инициализировать его с помощью new MyService(), потому что MyService ожидает параметр, который я не знаю, как предоставить.

Мой класс (my-service.class.ts)

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

@Injectable()

class MyService {
    constructor(
      @Inject('myOldService') private myOldService: any) {}

    static getMyUrl() {  
        console.log(this.myOldService); 
        // complains    
        // Property 'myOldService' does not exist on type 'typeof MyService
        return this.myOldService.getItemUrl();
    }
}

export default MyService;

Мой модуль

import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';

...other import..

import MyService from './my-service.class';

console.log(MyService.getMyUrl())
//has error because getMyUrl has error.

@NgModule({
    'imports': [
        CommonModule
    ],
    'declarations': [
        MyComponent
    ],
    'providers': [
        MyService
    ]
})

export class MyModule {}

В основном я не уверен, как внедрить мой старый сервис в статический метод. Любая помощь? Большое спасибо!


person Jwqq    schedule 28.11.2017    source источник


Ответы (1)


Если вам нужно запускать код только при загрузке модуля. Вы помещаете этот код в конструктор модуля.

Вы должны внедрить свою службу в конструктор MyModule

export class MyModule {
     constructor(MyService service) {
         console.log(service.getMyUrl());
     }
}

Вы также должны удалить static из сервиса. Не используйте статические методы с внедряемыми сервисами.

person Reactgular    schedule 28.11.2017