2017-01-11 3 views
1

Возможно, это просто, но я схожу с ума. Первый компонент является родительскимКомпоненты связи в Угловом 2

export class CompaniesComponent { 
    companies: Company[]; 
    companiesShown: Company[]; 
} 
constructor(private _companiesService: CompaniesService) { 
    this._companiesService.getCompanies().subscribe(data => { 
     this.companies = JSON.parse(data.text()); 
     this.companiesShowed = this.companies; 
    }); 
} 

Шаблон выглядит так:

.. 
<tr *ngFor="let company of companiesShowed"> 
    <td>{{ company.name }}</td> 
</tr> 
.. 
<app-pagination [data]="companies" [(dataShown)]="companiesShown"></app-pagination> 

Наконец, дети, как это:

export class PaginationComponent implements OnChanges { 
    @Input() data: Object[]; 
    @Input() dataShown: Object[]; 
    ngOnChanges() { 
    if (this.data != null && this.data.length > 0) { 
     this.dataShown = this.data; 
     console.log(this.dataShown); 
    } 
} 
} 

console.log дать мне правильную длину dataShown, но в родительском объекте всегда неопределенный/нулевая длина ... почему? Спасибо!

ответ

0

Для "двухстороннего связывания", как

[(dataShown)]="companiesShown" 

работать, ваш ребенок компонент должен

@Input() dataShown: Object[]; 
@Output() dataShownChange: EventEmitter<Object[]> = new EventEmitter<Object[]>(); 

где обновление от ребенка к родителю отправляется как

this.dataShownChange.emit([{x: 'y'}]); 

См. Также https://angular.io/docs/ts/latest/guide/template-syntax.html#!#two-way

+0

Хорошо, но я не могу испускать метод ngOnChanges(), не получая ошибку, например «Выражение изменилось после того, как оно было проверено». –

+0

Итак, вы хотите испустить 'dataShownChange', когда' data' изменились? Что такое сообщение об ошибке? –

+0

Я упростил код, но список компаний поступает из http-запроса, поэтому, когда создаются приложения с разбивкой по страницам, оно равно null. Я подписываю http-запрос и следующий i-карту json в массив (компании). Когда массив заполняется, компонентная палитра компонента должна обрезать массивные компании и помещать их в компании. Перехват этого события (компании не пустые) методом NgOnChanges, но этот метод не может уведомить родителя. Поэтому я не знаю, что мне нужно делать :( –

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