ioni c параметр конструктора недоступен в методе - PullRequest
0 голосов
/ 09 июля 2020

Привет, я использую navCtrl для pu sh данных из одного компонента, который является таблицей, и использую navParams для получения данных в другом компоненте, который должен вычислять сумму номеров столбцов в таблице.

Код в первом компоненте : (TableInputComponent)

    onTableCellUpdated(updatedTableCell: TableCell) {
        //this.logger.info(this.Label + 'onTableCellUpdated updatedTableCell:')
        //this.logger.info(updatedTableCell)
    
        // update gridRowJSON first - maintain data structure for displaying table
        this.gridRowJSON[updatedTableCell.indexOfGridRowJSON][updatedTableCell.Header] = updatedTableCell.Data1;
        //this.logger.info(this.Label + 'onTableCellUpdated this.gridRowJSON:')
        //this.logger.info(this.gridRowJSON)
        //this.logger.info(this.rows)
    
        // update here to trigger update for table-input-cell
        let updatingRow = this.rows[updatedTableCell.rowIndex]
        if (updatedTableCell.InputType === this.UI_TYPE_CHECKBOX) {
          updatingRow.filter(cell => cell.Header === updatedTableCell.Header)[0].Data1
            = updatedTableCell.Data1
          updatingRow.filter(cell => cell.Header === updatedTableCell.Header)[0].IsChecked
            = updatedTableCell.Data1 === updatedTableCell.InputAttribute.split('_')[0]
    
          // only uncheck other checkbox if selecting checkbox is checked
          // prevent coming to this function again when other checkbox is unchecked
          if (updatedTableCell.IsChecked && this.Data1) {
            updatingRow.filter(cell =>
              cell.Header !== updatedTableCell.Header
              && cell.InputType === 'CHECKBOX'
              && cell.InputWritable)
              .forEach(cell => {
                //this.logger.info(this.Label + 'onTableCellUpdated other CHECKBOX cell:')
                //this.logger.info(cell)
                cell.Data1 = ''
                cell.IsChecked = false
              });
          }
        }
      this.Data1 = this.getSubmitJSON() 

   this.emitUserInput(TableInputComponent, this.Data1);

}

Код во втором компоненте: (CalculatorInputTableComponent)

public tableData: any

  constructor(public navParams: NavParams) {
    this.tableData = this.navParams.get('tableData')
    this.logger.info("data1->",  this.tableData)
}

calculate() {
  this.logger.info("data2->",  this.tableData)
}

Когда я ввожу данные в таблицу, первый компонент передаст данные второму компоненту, поэтому я увидит, что регистратор показывает значение data1, потому что оно было передано в конструктор. Но когда я запускаю функцию «calculate ()», регистратор покажет, что data2 «undefined»

похоже, я не могу получить доступ к параметру «tableData» в конструкторе из метода calculate ().

Кто-нибудь может мне помочь? Спасибо.

1 Ответ

1 голос
/ 11 июля 2020

Способ передачи данных в несколько объектов:

Angular service

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class MessageService {
  messages: string[] = [];

  add(message: string) {
    this.messages.push(message);
  }

  clear() {
    this.messages = [];
  }
}

Пример - это просто копия из angular do c API.

Вызовите службу в своих компонентах следующим образом:

constructor(private messageService: MessageService) { }

После этого вы сможете вызывать методы / данные, которые вы сохранили в службе.

Быстрый совет об услугах, они остаются в живых после того, как вы их запустите. В отличие от компонента, который разрушается. Если вы хотите сбросить свои данные, когда ваши компоненты снова откроются, вы должны установить в своем коде.

...