2017-02-16 3 views
0

Plunker здесь: https://plnkr.co/edit/te67zdtkVkNCUzEtW5XO?p=preview см app.tsУгловое 2 - Локальная переменная/Template Ссылка Переменная с * ngIf - ТОЛЬКО первый элемент массива не имеет обязательной силы

фона:

Родительский компонент имеет массив и отображает один элемент в массиве. ChildComponent - это список, отображающий массив, с переменной selectedIdx, которая задается при щелчке элемента.

selectNumber(idx: number) { 
    this.selectedIdx = idx; 
    } 

ParentComponent получает значение selectedIdx от ребенка, сохраняя ребенка в качестве локальной переменной #child и доступ к нему с помощью child.selectedIdx.

Проблема:

связывания между selectedIdx в компоненте дочернего и родительского компонента доступа он отлично работает для каждого элемента в массиве, кроме от первого (индекс 0) - если вы нажмете 1, в элемент с индексом 0, исчезает Selected Number In Parent: _.

Это означает, что *ngIf является фальшивым, что означает, что selectedIdx является null.

Однако, это не так, поскольку когда я устанавливаю точку останова в функции selectNumber() в дочернем компоненте, this.selectedIdx устанавливается в 0. Должно быть что-то неловкое происходит с родителем, получающим значение 0, а затем мышление это нулевое значение?

Любая помощь приветствуется, большое вам спасибо.

основе: https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#parent-to-child-local-var

+0

Можете ли вы поделиться сокращенным и минимальным образцом кода проблемы? – shusson

+0

Привет, shusson. Я сделал массив простым массивом чисел, если это упростит проблему: https://plnkr.co/edit/te67zdtkVkNCUzEtW5XO?p=preview – Helen

+0

Похоже, что у вас есть хорошие ответы, но то, что я изначально означало на самом деле показать минимальный шаблон и компонент в вопросе. – shusson

ответ

3

Это потому, что в Javascript 0 == false, поэтому ваше выражение *ngIf возвращает false, когда сравнивается с 0.

изменить его на:

*ngIf="child.selectedIdx !== undefined" 

This answer имеет отличный стол об этом.

+0

Спасибо! Это устранило проблему. Сегодня я узнал что-то новое о Javascript. – Helen

+0

Добро пожаловать :) – developer033