如何在其他函数中访问变量?

时间:2019-01-08 18:14:16

标签: angular typescript datasource

我有一个变量'temp',它由一系列事务组成。 在ngOnInit()中,我订阅了一项服务,该服务将事务发送到MinerViewComponent。然后,该交易记录将显示在MinerViewComponent的表中。 “临时”包括所有交易。 当我单击按钮时,函数sendBlockToBC()被调用。 我期望的是带有事务的数组,但我得到的只是“ []”。 ngOnInit()中的console.log运行正常。我将所有交易都放在一个数组中。

我试图创建另一个变量,因为我以为this.temp.pop()是问题所在,但仍然给我一个空数组。

export interface Transaction {
  sender: number;
  recipient: number;
  amount: number;
  fee: number;
}

const ELEMENT_DATA: Transaction[] = [
];

@Component({
  selector: 'app-miner-view',
  templateUrl: './miner-view.component.html',
  styleUrls: ['./miner-view.component.css']
})
export class MinerViewComponent implements OnInit {
  transaction: Transaction;
  displayedColumns: string[] = ['sender', 'recipient', 'amount', 'fee'];
  dataSource = new MatTableDataSource<Transaction>(ELEMENT_DATA);
  temp: Transaction[] = [];
  blockNumber = 0;
  previousHash = '00000000000000000000000000000000';
  blockHash: string = this.generateBlockHash();

  constructor(private _TS: TransactionPoolToMinerService, private ref: ChangeDetectorRef) { }

  ngOnInit() {
    this._TS.transaction$.subscribe(transaction => {
        this.transaction = transaction;
        this.temp = this.dataSource.data.slice();
        this.temp.push(this.transaction);
        this.dataSource.data = this.temp;

        //console.log(this.temp);

        this.ref.detectChanges();
      }
    );
    this.temp = this.dataSource.data.slice();
    this.temp.pop();
    this.dataSource.data = this.temp;
    this.ref.detectChanges();
  }

  sendBlockToBC() {

    //console.log(this.temp);

    let block = new Block(this.blockNumber, this.temp, this.previousHash, this.blockHash);
    this.raiseBlockNumber();
    this.generateBlockHash();
  }


  raiseBlockNumber() {
    this.blockNumber++;
  }

  /** This method creates a random string of the alphabet [a-z0-9] to demonstrate a block hash out of 32 digits **/
  generateBlockHash() {    
}

我认为我找到了问题。我尝试在console.log(this.temp)中为函数MinerViewComponent调用sendBlockToBC()。这给了我正确的阵列。

但是该按钮在另一个组件中被调用

HTML:

<mat-toolbar color="primary">
  <span>Blockchain Simulation</span>
  <span class="fill-remaining-space"></span>
  <button mat-button (click)=triggerServiceMVToBC()>Mine</button>
</mat-toolbar>

TS:

@Component({
  providers: [MinerViewComponent],
  selector: 'app-toolbar',
  templateUrl: './toolbar.component.html',
  styleUrls: ['./toolbar.component.css']
})
export class ToolbarComponent implements OnInit {

  constructor(private minerViewComponent: MinerViewComponent) { }

  ngOnInit() {
  }

  triggerServiceMVToBC() {
    this.minerViewComponent.sendBlockToBC();
  }

}

我有一个工具栏,按钮在哪里。工具栏是一个自己的组件。单击按钮时,我为sendBlockToBC()调用函数MinerViewComponent。问题可能出在构造函数上,它创建了一个新的MinerViewComponent。解决该问题的一种优雅方法是什么?

0 个答案:

没有答案