1

到現在爲止,我一直在做下面的訂閱的值賦給我的班屬性:分配值,而不突變

export class ExampleComponent implements OnInit { 
    exampleId: string; 

    constructor(public route: ActivatedRoute) { 
    this.route.params.subscribe((params: Params) => this.exampleId = params.id); 
    } 

    ngOnInit() { 
    // Do something with exampleId here... 
    } 
} 

在努力擺脫突變,更多地轉向不變性;我希望將該訂閱返回的值分配給exampleId屬性,而無需在構造函數中這樣做。

什麼是最好的方式去做這件事?

+0

你可以在OnInit生命週期中做到這一點 –

+0

這仍然會改變原來的屬性定義。我需要在創建屬性時分配值。 –

+0

有一個快照替代獲取路徑參數,而不使用可觀察的訂閱[鏈接](https://angular.io/guide/router#snapshot-the-no-observable-alternative) –

回答

1

您從構造函數中產生的任何異步請求意味着您的Component不會是不可變的:它必須有兩個狀態;數據解決之前和之後。

因此,如果您想要一個不可變的組件,您必須將異步部件移出Component並在構造之前獲取數據。對於您給出的示例,可以在路由配置中使用路由解析服務和resolve對象。然後,路由器將在組件實例化之前解析數據,並可通過ActivatedRouteSnapshot.data訪問該數據。

對於更一般情況下,當該類依賴於異步數據時,使任何類不可變,您需要某種類型的工廠來解析數據並使其可用於構建類(這裏的路由器是工廠) 。