[英]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.