2016-05-01 3 views
-2

Я пытаюсь создать приложение с угловым 2, я хочу передать данные из компонента в другой компонент, который является родным или без отношения, Я искал это и читать некоторые документы, и я понимаю, что это возможно с созданием класса наблюдаемым, но не знаю, как это возможно ... У меня есть тег и хочу, когда пользователь нажимал на них, получает значение атрибута фильтра данных, и я хочу отправить это значение к другому компоненту и выполнить функцию ... я использую EventEmitter для дочернего к родительскому, но для этой проблемы не работает. это правда или нет? Если правда, как ?! спасибо.как передать данные другому компоненту с созданием класса наблюдаемого

+0

См https://angular.io/docs/ts/latest/ cookbook/component-communication.html #! # двунаправленный-сервис –

ответ

0

Вам нужно создать общую службу для этого:

export class SharedService { 
    subject$:Subject = new Subject(); 
} 

Эта услуга должна быть общим для обоих компонентов. Для того, чтобы убедиться, что вы можете установить его, когда развернув приложение:

bootstrap(AppComponent, [ SharedService ]); 

Обратите внимание, что этот провайдер не должен быть указан в атрибуте компонентов providers.

Вот компонент, в котором инициируется событие:

@Component({ 
    (...) 
    template: ` 
    <div (click)="onClick()"></div> 
    ` 
}) 
export class Comp1 { 
    constructor(private service:SharedService) {} 
    onClick() { 
    this.service.subject$.next('a value'); 
    } 
} 

И компонент, который принимает значение:

@Component({ 
    (...) 
}) 
export class Comp2 { 
    constructor(private service:SharedService) { 
    this.service.subject$.subscribe(value => { 
     // Data received 
    }); 
    } 
} 
+0

tnx для ответа ... но я пытаюсь это, но его не сработало ... Компоненты moust имеют какое-либо отношение? child или parent? его возможно без какого-либо отношения? –

+0

Добро пожаловать! Никакие компоненты не должны иметь отношения к использованию такого подхода. Что вы подразумеваете под словом «его не сработало»? ;-) –

+0

Ключевой вопрос здесь - поделиться одним и тем же экземпляром. Поэтому укажите эту службу при начальной загрузке, но не в атрибуте 'providers' компонентов. См. Эту ссылку для получения дополнительной информации: https://angular.io/docs/ts/latest/cookbook/component-communication.html –

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