angular - 在定义的元素上遇到切片问题
问题描述
我使用 Angular 9 并尝试实现分页。我收到以下错误:
错误类型错误:无法读取未定义的属性“切片”
我的组件代码:
import { Component, OnInit, ViewChild } from '@angular/core';
import { MatPaginator, PageEvent } from '@angular/material/paginator';
import { MatTableDataSource } from '@angular/material/table';
import { TestResult } from '../models/testResult';
import { TestResultService } from '../test-result/test-result.service';
@Component({
selector: 'app-test-result-list',
templateUrl: './test-result-list.component.html'
})
export class TestResultListComponent implements OnInit {
testResults: TestResult[];
dataSource: MatTableDataSource<TestResult>;
displayColumns = ["tagNo", "testStart", "unitTestId", "isApproved", "valveTestEnvironment"];
length = 100;
pageSize = 10;
pageSizeOptions = [1, 2, 5, 10];
@ViewChild(MatPaginator) paginator: MatPaginator;
pageEvent: PageEvent;
constructor(private readonly testResultService: TestResultService) { }
loadData(pageIndex, pageSize)
{
this.dataSource = new MatTableDataSource<TestResult>(this.testResults.slice(pageIndex, pageIndex + pageSize));
}
ngOnInit(): void {
this.testResultService.getTestResults().subscribe(result => this.testResults = result);
this.loadData(0, this.pageSize);
}
}
我已经将 lice 与 this.testResults 一起使用,它已经定义为 TestResult 类型的数组。
解决方案
testResults
变量是异步分配的。到loadData()
调用函数时,testResults
尚未分配任何值。所有直接依赖于它的语句也应该是异步的,即它们应该在订阅回调中。
ngOnInit(): void {
this.testResultService.getTestResults().subscribe(result => {
this.testResults = result;
this.loadData(0, this.pageSize); // <-- inside subscription
});
}
您可以在此处了解有关异步数据的更多信息。
推荐阅读
- php - 如果我从 Laravel 的端口服务器中删除“/dashboard”,如何将用户重定向到仪表板?
- docker - 如何使用诗歌更新 docker 中的依赖项?
- c++ - C++:如何创建一个集合字段来存储有限数量的类实例?
- sql-server - 无法从 Excel 连接到 SQL Server 以生成报告。已启用命名管道和 tcp/ip。使用可信连接
- php - Gmail SMTP 中继将不允许与 PHPMailer 连接
- jmeter - JMETER 嵌套 while 循环在 CSV 数据文件的第一行停止
- reactjs - 为什么这个 setInterval 函数会导致 TypeError: n is undefined
- multithreading - Julia线程中的变量是循环线程本地的吗?
- assembly - 这个编码答案看起来不错吗?
- json - 使用python从JSON文件中提取数据