передавать данные через ‹router-outlet›, используя взаимодействие компонентов в angular2

Я пытаюсь использовать эту технику перехватить свойство ввода изменяется с помощью установщика, чтобы передать некоторые данные из родительского компонента в дочерний компонент и вызвать метод в дочернем компоненте при изменении значения. моя проблема в том, что дочерний компонент привязан к родительскому на <router-link>, и когда я пытаюсь передать данные, используя:

parent_component.html:

<router-outlet [some_value] = "some_value"></router-outlet>

где some_value - это параметр, который я пытаюсь передать от родителя к потомку.

parent_component.ts:

public some_value: string;

а также

parent_component.ts:

@Input()
  public set some_vale(number : string){
    this._some_value = number;
  }

однако я получаю сообщение об ошибке

Отклонение необработанного обещания: ошибки синтаксического анализа шаблона: невозможно выполнить привязку к «some_value», поскольку это не известное свойство «router-outlet».

Что я делаю неправильно? Как правильно передавать данные от родительского компонента к дочернему при использовании <router-outlet>?

Заранее благодарим за любую помощь.


person Bahman Rouhani    schedule 23.07.2017    source источник
comment
до сих пор в ‹router-outlet› нет привязки свойств, вы можете использовать службы для связи между компонентами.   -  person Raed Khalaf    schedule 23.07.2017
comment
так что просто нет возможности это сделать?   -  person Bahman Rouhani    schedule 23.07.2017
comment
Думаю, так нельзя. Если вы хотите отправить данные от маршрутизатора к дочернему, объявите Service и используйте Observable для отправки вашего объекта. Вы создадите .next (your-object) для компонента, в котором объявлен маршрутизатор, и .subscribe (object = ›{...}); на дочернем компоненте   -  person Mattew Eon    schedule 23.07.2017
comment
comment
нет, bcs при использовании привязки свойств, вы привязываете свойство, которое должно существовать, но вы не можете быть уверены, что оно будет существовать в ‹router-outlet›.   -  person Raed Khalaf    schedule 23.07.2017
comment
Тогда воспользуюсь услугами. Спасибо за вашу помощь.   -  person Bahman Rouhani    schedule 23.07.2017


Ответы (1)


Услуга:

import {Injectable, EventEmitter} from "@angular/core";    

@Injectable()
export class DataService {
onGetData: EventEmitter = new EventEmitter();

getData() {
  this.http.post(...params).map(res => {
    this.onGetData.emit(res.json());
  })
}

Составная часть:

import {Component} from '@angular/core';    
import {DataService} from "../services/data.service";       
    
@Component()
export class MyComponent {
  constructor(private DataService:DataService) {
    this.DataService.onGetData.subscribe(res => {
      (from service on .emit() )
    })
  }

  //To send data to all subscribers from current component
  sendData() {
    this.DataService.onGetData.emit(--NEW DATA--);
  }
}
person egor.xyz    schedule 07.08.2017