我是 Angular Material 的新手,我正在使用它進行我的第一個專案,但是我開始意識到關閉對話框后頁面不會重繪 ,因此您看不到新的更新,無論是您添加的新記錄,還是記錄您更新或洗掉,除非您手動或通過以下代碼重新加載頁面,否則您看不到它:
openDialog(projectId:number):void{
const dialogRef = this.dialog
.open(UpdateProjectComponent, {
data:{id: projectId}
})
.afterClosed()
.subscribe((reloadOrNot:boolean)=>{
if(reloadOrNot) window.location.reload();
})
如果我按如下方式更改我的代碼,則不會發生任何事情:
openDialog(projectId:number):void{
const dialogRef = this.dialog
.open(UpdateProjectComponent, {
data:{id: projectId}
})
.afterClosed()
.subscribe((reloadOrNot:boolean)=>{
if(reloadOrNot) this.projectService.getProjects().subscribe(
data=>{
this.projects = data;
}
)
})
在 updateProjectComponent 中,我所擁有的只是以編程方式創建表單的反應式表單、通過 id 獲取專案的方法和更新的方法。所有這些方法都有效,它們都能正確完成作業,我唯一的問題是,一旦我關閉對話框,專案頁面就不會重繪 ,除非我重新加載它,這是我試圖避免的。
我正在呼叫提供所有現有專案的 Java 后端,但是如前所述,當單擊對話框頁面中的提交按鈕時,對話框關閉但專案頁面不重繪 資料。如果沒有重新加載代碼,最好的方法是什么?
uj5u.com熱心網友回復:
如果我理解正確,我們看不到您的其余代碼,但更改this.projects = data未注冊到 Angular Change Detection 并且您的模板不會重繪 。為了除錯,我們需要更多相關的代碼來處理this.projects.
但是,有一些方法可以運行更改檢測回圈。
使用傳播:
this.projects = ...data;
https://stackoverflow.com/a/64823904/15439733
使用 CD 參考
constructor(private cd: ChangeDetectorRef) {}
this.projects = data;
this.cd.dedectChanges();
https://angular.io/api/core/ChangeDetectorRef
配置OnPush-> Default(或完全洗掉此行以使用默認值)
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
changeDetection: ChangeDetectionStrategy.OnPush,
})
https://angular.io/api/core/ChangeDetectionStrategy#OnPush
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/516800.html
標籤:有角度的角材料
上一篇:Angular14:錯誤“ViewUsersComponent”類的引數“userService”沒有合適的注入令牌
