![](/img/trans.png)
[英]Angular Component constructor loads twice when httpClient is called from Constructor
[英]Angular loading values in component from constructor
我在獲取組件的初始化值時遇到問題。 我有一個頁面,我設置了一條路線。 加載路由(角度路由)時,組件構造函數中的值已設置,但似乎跳過了構造函數的一部分,因此值不符合預期。
這是我的構造函數:
public userQMail: QMails[] = [];
public low: string;
public med: string;
public all: string;
constructor(private qms: QMailsService) {
this.userQMail = this.qms.userQMails;
let x: number = 0;
let y: number = 0;
this.userQMail.forEach((e) => {
if (parseInt(e.label) <= 30) {
x++;
} else {
y++;
}
});
this.low = x.toString();
this.med = y.toString();
this.all = (x + y).toString();
}
我看到的值是 0、0、0(代表低、中、全部),所以它跳過了 forEach ……我不知道為什么。 當我更改頁面並返回 go 時,值是正確的。 所以我想這是某種初始化優先級問題? 或者它必須做某事。 與路由?
在組件的第一次加載時, forEach 中的所有內容都被跳過......
我是 Angular 的新手,所以我可能不明白這里的一個概念。
我假設userQEmails
中的QMailsService
是異步加載的,或者至少是在調用此組件中的構造函數后初始化的。 如果是這種情況,這就解釋了為什么這些值都是零。
您可以通過直接使用 getter 訪問服務中的值來解決此問題,例如
get low(): string {
return this.qms.userQMails?.filter(x => parseInt(e.label) <= 30)?.length?.toString();
}
get mid(): string {
return this.qms.userQMails?.filter(x => parseInt(e.label) > 30)?.length?.toString();
}
get all(): string {
return this.qms.userQMails?.length?.toString();
}
您還應該研究/了解更多關於 rxjs可觀察量和數據流的信息,以更清晰、更可維護的方式修復此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.