简体   繁体   English

如何为角度4中的变量分配响应?

[英]How to assign response to variable in angular 4?

If someone can help me understand how to bind response to view in angular4, i was just trying to get data from backend using SteamService i have retrieve and printed the data now trying to assign it to dataSource using export interface but it is not happening. 如果有人可以帮助我了解如何在angular4中将响应绑定到视图,那我只是在尝试使用SteamService从后端获取数据,我已经检索并打印了数据,现在正尝试使用导出接口将其分配给dataSource但是这没有发生。 what is implemented wrong in below code ? 下面的代码实现了什么错误?

stream.component.html stream.component.html

    <mat-table #table [dataSource]="dataSource">

      <!-- Position Column -->
      <ng-container matColumnDef="ticketNum">
        <mat-header-cell *matHeaderCellDef> Ticket Number </mat-header-cell>
        <mat-cell *matCellDef="let element"> {{element.ticketNum}} </mat-cell>
      </ng-container>

      <!-- Name Column -->
      <ng-container matColumnDef="assetID">
        <mat-header-cell *matHeaderCellDef> Asset ID</mat-header-cell>
        <mat-cell *matCellDef="let element"> {{element.assetID}} </mat-cell>
      </ng-container>

      <!-- Weight Column -->
      <ng-container matColumnDef="severity">
        <mat-header-cell *matHeaderCellDef> Severity </mat-header-cell>
        <mat-cell *matCellDef="let element"> {{element.severity}} </mat-cell>
      </ng-container>

      <!-- Color Column -->
      <ng-container matColumnDef="riskIndex">
        <mat-header-cell *matHeaderCellDef> Risk Index </mat-header-cell>
        <mat-cell *matCellDef="let element"> {{element.riskIndex}} </mat-cell>
      </ng-container>
      <ng-container matColumnDef="riskValue">
        <mat-header-cell *matHeaderCellDef> Risk Value </mat-header-cell>
        <mat-cell *matCellDef="let element"> {{element.riskValue}} </mat-cell>
      </ng-container>

      <ng-container matColumnDef="ticketOpened">
        <mat-header-cell *matHeaderCellDef> Ticket Opened </mat-header-cell>
        <mat-cell *matCellDef="let element"> {{element.ticketOpened}} </mat-cell>
      </ng-container>

      <ng-container matColumnDef="lastModifiedDate">
        <mat-header-cell *matHeaderCellDef> Last Modified </mat-header-cell>
        <mat-cell *matCellDef="let element"> {{element.lastModifiedDate}} </mat-cell>
      </ng-container>
      <ng-container matColumnDef="eventType">
        <mat-header-cell *matHeaderCellDef> Event Type </mat-header-cell>
        <mat-cell *matCellDef="let element"> {{element.eventType}} </mat-cell>
      </ng-container>

      <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
      <mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
    </mat-table>
  </div>
</div>

stream.module.ts stream.module.ts

 import {
     Component,
     OnInit
 } from '@angular/core';
 import {
     StreamService
 } from '../stream.service';
 import {
     MatTableDataSource
 } from '@angular/material';

 @Component({
     selector: 'app-stream',
     templateUrl: './stream.component.html',
     styleUrls: ['./stream.component.css']
 })
 export class StreamComponent implements OnInit {
     displayedColumns = ['ticketNum', "assetID", "severity", "riskIndex", "riskValue", "ticketOpened", "lastModifiedDate", "eventType"];
     dataSource = new MatTableDataSource(ELEMENT_DATA);
     stream: any[];
     constructor(private streamService: StreamService) {};
     ngOnInit() {
         this.streamService.getAllStream().subscribe(stream => {
             this.stream = stream;
             const ELEMENT_DATA = Element[] = stream;
         });
     }

 }


 export interface Element {
     ticketNum: number;
     ticketOpened: number;
     eventType: string;
     riskIndex: string;
     riskValue: number;
     severity: string;
     lastModifiedDate: number;
     assetID: string;
 }

First of all, dataSource is referring to ELEMENT_DATA which is not defined when dataSource is defined. 首先, dataSource引用的是ELEMENT_DATA ,在定义dataSource未定义。

The definition of ELEMENT_DATA occurs in the callback of subscribe and it is scoped to this callback. ELEMENT_DATA的定义发生在subscribe的回调中,并且范围仅限于此回调。

To make your assignment, you have to use dataSource inside the callback of subscribe . 为了让你的任务,你必须使用dataSource的回调内部subscribe

Also, your stream is useless unless you use it elsewhere in the component. 另外,除非在组件的其他位置使用stream ,否则stream是无用的。

You can write your code like this: 您可以这样编写代码:

import { Component, OnInit } from '@angular/core';
import { StreamService } from '../stream.service';
import { MatTableDataSource } from '@angular/material';

@Component({
    selector: 'app-stream',
    templateUrl: './stream.component.html',
    styleUrls: ['./stream.component.css']
})
export class StreamComponent implements OnInit {
    displayedColumns = ['ticketNum', "assetID", "severity", "riskIndex", "riskValue", "ticketOpened", "lastModifiedDate", "eventType"];
    dataSource: MatTableDataSource<Element[]>;

    constructor(private streamService: StreamService) {};

    ngOnInit() {
        this.streamService.getAllStream().subscribe(stream => {
            this.dataSource = new MatTableDataSource(stream);
        });
    }
}


export interface Element {
    ticketNum: number;
    ticketOpened: number;
    eventType: string;
    riskIndex: string;
    riskValue: number;
    severity: string;
    lastModifiedDate: number;
    assetID: string;
}

Another way, you can make it is declaring dataSource like this: 另一种方法,您可以像这样声明dataSource

dataSource = new MatTableDataSource<Element[]>();

And setting data like this: 并像这样设置数据:

this.dataSource.data(stream);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM