angular 2 - дочернее свойство @Input не определено при использовании вложенных свойств @Input() во вложенных компонентах

Пытаясь сделать мое приложение более модульным, поэтому я создаю вложенные компоненты следующим образом:

Это выпадающий компонент, который многократно используется в компоненте диаграммы страницы.

Dropdown.component.ts

@Component({
  selector: 'my-dropdown',
  templateUrl: './dropdown.component.html',
  styleUrls: ['dropdown.component.scss'],
  encapsulation: ViewEncapsulation.None,
})

/**
 * @classdesc Dropdown component class
 */
export class DropdownComponent implements OnInit {


  private opened: boolean = false;

  /**
   * placeholder for the dropdown
   * @type {string}
   */
  @Input() placeholder: string;

  /**
   * event handler which is called when selected value is changed
   * @type {EventEmitter<any>}
   */
  @Output() onSelect = new EventEmitter<any>();

  /**
   * inner select component component
   */
  // @ViewChild('select') selectComponent: any;

  /**
   * Two way data binding implementation for selectedValue property
   */
  @Output() selectedChange: EventEmitter<any>;

  constructor() {
    this.selectedChange = new EventEmitter();
  }

  ngOnInit() {
  }

  /**
   * selectedValue setter. if value is not a string we are "Stringifying it"
   * @param value - the selected value
   */
  @Input() selected: { label: string, value: string };

  /**
   * options setter. if object "value" property is not a string we are "Stringifying it"
   * @param value
   */
  @Input() options;
    ....
    }

Это страница диаграмм, в которой есть несколько экземпляров моих выпадающих меню (для простоты показан только один)

Графики-page.html

...
<div class="content">
   <my-dropdown [options]="timeframeDropdownInfo.options" 
       [placeholder]="timeframeDropdownInfo.placeholder" 
       [(selected)]="timeframeDropdownInfo.selectedOption"
       (onSelect)="timeframeDropdownInfo.onSelect($event)">
   </my-dropdown>
</div>...

Графики-Page.ts

@Component({
  selector: 'charts-page',
  templateUrl: './charts-page.component.html',
  styleUrls: ['./charts-page.component.css'],
})
export class ChartsPageComponent implements OnInit {

  @Input() timeframeDropdownInfo: DropdownModel;
  ...


  constructor() { }

  ngOnInit() {
  }

}

Теперь я хочу использовать компонент страницы диаграмм в нескольких местах с разными данными. как это:

Торги-Component.html

<charts-page [timeframeDropdownInfo]="timeframeDropdownInfo"></charts-page>

и вот как я инициализирую свое свойство timeframeDropdownInfo:

Trades.Component.ts

    ...
  constructor(private tradeService: TradeService, private myElement: ElementRef) {

        //timeframe dropdown
        this.timeframeDropdownInfo = new DropdownModel();
        this.timeframeDropdownInfo.options = TransactionsTradesData.TIME_FRAMES;
        this.timeframeDropdownInfo.placeholder = 'Time Frame';
        this.timeframeDropdownInfo.selectedOption = this.selectedTimeframe;
        this.timeframeDropdownInfo.onSelect = this.onTimeframeChange;
...

Проблема в том, что выпадающий список пуст. проблема не в выпадающем списке, потому что он работал раньше. только когда я добавил еще один уровень вложенности, привязка оборвалась. Использование Augury показывает, что все инициализируется на уровне страницы диаграммы, но в раскрывающемся списке свойства компонента не определены. так что я предполагаю, что выпадающий список отображается перед инициализацией данных, но я подумал, что аннотация @Input сработает. какие-нибудь идеи, как я могу заставить эту многоуровневую вложенность работать?

0 ответов

Другие вопросы по тегам