我有一個組件在另一個組件內,通過標籤添加。在某個時候,我想重新初始化這個子組件,就像它調用的第一個組件一樣。有沒有辦法做到這一點?如何重新初始化angular2中的子組件?
回答
您可以編寫自己的cleanup
方法。但更快的方式(但不方便)是使用*ngIf
。當值爲false
時,組件從頁面上完全刪除(銷燬)。當它回到true
它通過常規路徑constructor > ngOnInit
等等。爲什麼它不方便?
- 它可能看起來醜陋
- 可能需要您來觸發變化檢測手動
。
reinitChildComponent(): void{
this.childVisible = false;
this.changeDetectorRef.detectChanges();
this.childVisible = true;
this.changeDetectorRef.detectChanges();
}
正常工作對我來說,感謝 – jorghe94
我在做一個測試頁面時會遇到這個問題,該測試頁面會渲染用於視覺檢查的組件。
我試過在另一個答案中提到的ngIf
方法,但沒有使用setTimeout
這似乎更像是一個黑客。
原來ngFor
是完美的。您只需使用一個具有單個空對象的數組。每次修改陣列時,ngFor
將重新創建內部組件。
public reset: any[] = [{}];
public onRecreate() {
this.reset[0] = {};
}
然後在你的模板
<my-child-component *ngFor="let r of reset"></my-child-component>
<button (click)="onRecreate()">Reset</button>
通常你應該只從它的構造函數/ ngOnInit移動兒童組件的初始化邏輯到它的ngOnChanges掛鉤。 但如果你真的需要一個組件重新初始化不論何種原因(通常如果表示的對象發生了變化),只需使用一個* ngFor,它迭代僅與該具體原因爲元素的數組:
<child-component [child]="child" *ngFor="let child of [child]"></child-component>
如果您希望組件僅在所表示對象的某個屬性發生更改時才重新初始化,則可以使用trackBy函數。
您可以使用* ngIf重新初始化組件。
<mychild *ngIf="flag"></mychild>
可以重新初始化通過使標誌爲假和真
這裏是一個很好的例子,如何從父組件調用子組件:
我叫子組件的功能,以我的父組件是這樣的:
<cp-file-manager [(ngModel)]="container" name="fileManager"[disableFiles]="true" [disableDocId]="id" [newFolderId]="newFolderId"></cp-file-manager>
在這裏你可以看到如何從父組件調用子組件函數NT TS 文件:
import { Component, OnInit, ViewChild } from '@angular/core';
import { FileManagerComponent } from '../../../../shared/components/file-manager/file-manager.component'
@ViewChild(FileManagerComponent) fileManager: FileManagerComponent;
doSomething() { //this is parent component function
this.fileManager.openFolder(); //openFolder-is child component function
}
雖然此鏈接可以回答這個問題,最好是在這裏有答案的主要部件,並提供鏈接以供參考。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [評分](/審查/低質職位/ 18622522) – Alisson
我已經解釋了一切 –
- 1. 如何初始化angular2物化組件?
- 2. 如何重新初始化數組?
- 3. Angular2如何初始化數組對象
- 4. 重新初始化數組
- 5. Angular2 - 初始化
- 6. 在Python中,你如何初始化/重新初始化關聯數組(字典)?
- 7. ExtJS的組合框重新初始化
- 8. 種子 - 如何重新初始化我的種子 - 軌道
- 9. 如何重新初始化我的bean
- 10. 如何重新初始化jQuery文件上傳數據數組?
- 11. 重新初始化動態數組
- 12. ç重新初始化數組
- 13. 如何在java中重新初始化int數組
- 14. 數組初始化的「新」
- 15. 如何重新初始化GoogleLogging?
- 16. 如何重新初始化Zend_Form_Element_Hash?
- 17. 如何重新初始化Facebook
- 18. 如何重新初始化視圖
- 19. 如何重新初始化Datatable?
- 20. 如何重新初始化Angular指令?
- 21. 如何手動重新初始化jscrollpane?
- 22. 如何在angular2和typescript中初始化數組
- 23. Angular2使用HTML中的組件初始化類
- 24. 如何重新初始化Tkinter中的文本小部件?
- 25. 如果已經初始化,通過shell重新初始化rbenv
- 26. 如何用Guice重新初始化控制器中的注入組件?
- 27. Javascript Ajax重新初始化
- 28. Java Arraylist重新初始化
- 29. 重新初始化MembershipProvider ASP.NET
- 30. jqgrid重新初始化
你到底想幹什麼?沒有辦法告訴組件重新初始化自己。但是有辦法讓它爲自己重新獲取新數據。如果您可以提供更多信息,我們可以爲您提供一些選擇。 – DeborahK
的想法是打開組件爲模式,預加載,其將打開它的每個組件。當然,當模式關閉時,組件需要重新啓動以便將來調用。 – jonyjm