无法推送到 angular 数组
Cannot push to angular array
我有一个过滤器可以获取从 mongoDB、return 到 table 的所有数据,其中日期在选定范围内。但是,当我 运行 代码时,我在控制台中收到一条错误消息“无法读取未定义 的 属性 'push'”。
app.component.html:
<div class="search">
<input type="text" matInput
id = 'calander'
ngxDaterangepickerMd
[locale]="{
cancelLabel: 'Cancel',
applyLabel: 'Okay',
clearLabel: 'Clear',
format: 'YYYY/MM/DD'
}"
startKey="start"
endKey="end"
[(ngModel)]="selected"
name="daterange"
(ngModelChange)="doSomething($event)"/>
<button class="ripple" type="submit" ></button>
</div>
<table>
<tr *ngFor="let email of filter(emails)" >
<td class="tg-0lax" id="tableText">{{ email.Sender}}</td>
<td class="tg-0lax" id="tableText">{{ email.Sent_To}}</td>
<td class="tg-0lax" id="tableText">{{ email.Subject}}</td>
<td class="tg-0lax"><!--{{ email.Attachment}} --></td>
<td class="tg-0lax"><b>{{ email.Created_On | date: 'yyyy/MM/dd'}}</b></td>
</tr>
</table>
app.component.ts:
export class AppComponent {
// Define a users property to hold our user data
emails: Array<any>;
filteredEmails: Array<any>;
startDate: any;
endDate: any;
doSomething(event){
this.startDate = new Date(event.start);
this.endDate = new Date(event.end);
}
filter(emails: any[]): any[] {
let filteredEmails = new Array()
if(this.startDate == null && this.endDate == null){
this.filteredEmails = this.emails;
return filteredEmails;
}
else{
this.filteredEmails.push(emails =>
emails.Created_On >= this.startDate && emails.Created_On <= this.endDate);
}
return filteredEmails;
}
constructor(private _dataService: DataService) {
// Access the Data Service's getUsers() method we defined
this._dataService.getEmails()
.subscribe(res => this.emails = res);
}
}
您调用 this.filteredEmails.push
的行试图在未初始化的数组上调用 push
。您的组件有一个 filteredEmails
属性,但它没有被初始化。我也不确定为什么你有一个本地 filteredEmails
变量以及一个同名的 class 属性。
要么删除 this
,要么初始化 属性 filteredEmails: Array<any> = [];
如果您打算使用组件 class 的 属性,您只需初始化该变量。如果您打算仅使用方法中声明的 filteredEmails
变量,请删除 this
.
正如@Matt U 所解释的那样,属性 未初始化;你只分配了类型。
所以通过分配一个空数组来初始化它。即
export class AppComponent {
emails = [];
filteredEmails = [];
...
此外,当用空数组初始化时,你不需要分配 属性 的类型,它会自动完成。
祝你好运
我猜你应该将数组初始化为 filter
方法,如下所示:
filter(emails: any[]): any[] {
let filteredEmails = new Array<any>();
...
}
像这样声明和清空数组:-
export class AppComponent {
emails: any[] = [];
filteredEmails: any[] = [];
}
然后像这样压入数组中的元素:-
emails.push(element);
希望这会有所帮助。
我有一个过滤器可以获取从 mongoDB、return 到 table 的所有数据,其中日期在选定范围内。但是,当我 运行 代码时,我在控制台中收到一条错误消息“无法读取未定义 的 属性 'push'”。
app.component.html:
<div class="search">
<input type="text" matInput
id = 'calander'
ngxDaterangepickerMd
[locale]="{
cancelLabel: 'Cancel',
applyLabel: 'Okay',
clearLabel: 'Clear',
format: 'YYYY/MM/DD'
}"
startKey="start"
endKey="end"
[(ngModel)]="selected"
name="daterange"
(ngModelChange)="doSomething($event)"/>
<button class="ripple" type="submit" ></button>
</div>
<table>
<tr *ngFor="let email of filter(emails)" >
<td class="tg-0lax" id="tableText">{{ email.Sender}}</td>
<td class="tg-0lax" id="tableText">{{ email.Sent_To}}</td>
<td class="tg-0lax" id="tableText">{{ email.Subject}}</td>
<td class="tg-0lax"><!--{{ email.Attachment}} --></td>
<td class="tg-0lax"><b>{{ email.Created_On | date: 'yyyy/MM/dd'}}</b></td>
</tr>
</table>
app.component.ts:
export class AppComponent {
// Define a users property to hold our user data
emails: Array<any>;
filteredEmails: Array<any>;
startDate: any;
endDate: any;
doSomething(event){
this.startDate = new Date(event.start);
this.endDate = new Date(event.end);
}
filter(emails: any[]): any[] {
let filteredEmails = new Array()
if(this.startDate == null && this.endDate == null){
this.filteredEmails = this.emails;
return filteredEmails;
}
else{
this.filteredEmails.push(emails =>
emails.Created_On >= this.startDate && emails.Created_On <= this.endDate);
}
return filteredEmails;
}
constructor(private _dataService: DataService) {
// Access the Data Service's getUsers() method we defined
this._dataService.getEmails()
.subscribe(res => this.emails = res);
}
}
您调用 this.filteredEmails.push
的行试图在未初始化的数组上调用 push
。您的组件有一个 filteredEmails
属性,但它没有被初始化。我也不确定为什么你有一个本地 filteredEmails
变量以及一个同名的 class 属性。
要么删除 this
,要么初始化 属性 filteredEmails: Array<any> = [];
如果您打算使用组件 class 的 属性,您只需初始化该变量。如果您打算仅使用方法中声明的 filteredEmails
变量,请删除 this
.
正如@Matt U 所解释的那样,属性 未初始化;你只分配了类型。
所以通过分配一个空数组来初始化它。即
export class AppComponent {
emails = [];
filteredEmails = [];
...
此外,当用空数组初始化时,你不需要分配 属性 的类型,它会自动完成。
祝你好运
我猜你应该将数组初始化为 filter
方法,如下所示:
filter(emails: any[]): any[] {
let filteredEmails = new Array<any>();
...
}
像这样声明和清空数组:-
export class AppComponent {
emails: any[] = [];
filteredEmails: any[] = [];
}
然后像这样压入数组中的元素:-
emails.push(element);
希望这会有所帮助。