2017-01-25 8 views
0

У меня есть компонент, который использует 2 услуги.angular2 service instancied 2 раза

export class UseComponent {  
    constructor(private _service1: Service1, 
       private _service2: Service2){} 

Вторая услуга требует метода, существующего в первой службе. Таким образом, я впрыснуть также услугу fisrty во втором

export class Service2{ 

constructor(private _service1: Service1) {}; 

getLabel(): string{ 
    return this._service1.getLanguageLabel(); 
} 

поставщика для обслуживания в модуле

@NgModule({ 
    imports: [.....], 
    declarations: [.....], 
    providers: [Service1, Service2] 
    }) 
    export class UseModule { } 

, когда UseComponent использует метод getLabel, то Service1 является instancied еще раз (первым созданием экземпляра, когда компонент инициализируется)

Почему это второе введение? Как этого избежать?

+0

У вас установлен провайдер в UseComponent? –

ответ

1

работ в целом: https://plnkr.co/edit/pWgQ5iVNVVGmHBZsv2SD?p=preview

Позаботьтесь, что эти услуги не в списке поставщиков любой другой module «s.

@Injectable() 
export class Service1 { 

    constructor() { 
    addLog('created service 1'); 
    } 

    public anyFunc() { 
    return "huhu"; 
    } 
} 

@Injectable() 
export class Service2 { 

    constructor(private _srv1: Service1) { 
    addLog('created service 2'); 
    } 

    public anyFunc() { 
    return this._srv1.anyFunc(); 
    } 
} 

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     <h2>Hello {{name}}</h2> 
    </div> 
    <p *ngFor="let log of logs | async">{{log}}</p> 
    `, 
}) 
export class App { 
    name:string; 
    private logs = logs; 

    constructor(private _srv2: Service2) { 
    this.name = 'Angular2' 

    addLog(this._srv2.anyFunc()); 
    } 
} 

@NgModule({ 
    imports: [ BrowserModule ], 
    declarations: [ App ], 
    providers: [Service1, Service2], 
    bootstrap: [ App ] 
}) 
export class AppModule { } 

 Смежные вопросы

  • Нет связанных вопросов^_^