2016-03-31 112 views
1

組件是否可以根據其輸入提供服務(或可提供的服務)?在我的情況下,我的組件使用基於另一個Firebase服務的服務,並且我希望組件爲子組件提供新的Firebase服務,因此其他服務將只訪問db中的子部件。提供角度2組件變量

在我當前的解決方案中,我的組件調用服務的setChild函數來設置子項,但我很好奇,如果可以按上述方式。

感謝, 塔馬斯

回答

2

不,那是不可能的。當裝飾器參數被評估時,沒有組件的實例。

您可以做的是將服務注入到添加到提供者的組件中,並將該值傳遞給服務。當一個孩子也注射了同樣的服務,它們共享相同的值:

@Injectable() 
class MyService { 
    ... 
} 

@Component({ 
    selector: 'parent', 
    template: 'x' 
    providers: [MyService], 
)} 
class Parent { 
    @Input() someInput; 

    constructor(private myService:MyService) { 
    } 

    ngOnChanges() { 
    this.myService.sharedValue = this.someInput; 
    } 
} 

@Component({ 
    selector: 'descendant', 
    template: 'x' 
)} 
class Descendant { 
    constructor(myService:MyService) { 
    myService.sharedValueChange.subscribe(val => { 
     console.log(val); 
    }); 
    } 
} 

有關使用Observable通知有關變化看Delegation: EventEmitter or Observable in Angular2

+1

非常感謝您的回答創建一個共享服務的更多細節。我會這樣做。 – bucicimaci