2016-03-31 3 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

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