2016-06-28 21 views
2

關於容器使用的Aurelia文檔清楚地表明:「每次路由器導航到屏幕時,它都會創建一個子容器來封裝與該導航事件相關的所有資源,然後自動註冊該屏幕的視圖模型,如您所知,默認情況下,自動註冊會導致視圖模型被註冊爲單例。「視圖模型是單身?或不?

但是,我在我的應用程序中看到,所有視圖模型構造函數默認情況下都會在激活關聯視圖時被調用。據我所知,這不是視圖模型的「單身」行爲。

任何人都可以解釋我在這裏不理解嗎?

謝謝

回答

5

瞭解子容器對生命期的影響很重要。當路由器導航時,它創建一個子容器,並在該子容器內註冊屏幕的視圖模型。它是一個單身人士,作用於該子容器,不在應用程序級別。所以,當這個子容器被處置時(下一次有導航),所有在它內部註冊的單身也會被處置掉。

如果您希望視圖模型「超出」導航請求週期,則可以使用@singleton()裝飾器。

+1

啊,我不知道孩子的容器被導航。 以下是關於@singleton的文檔說明:「_This裝飾器允許您指定true作爲參數,以指示該單例不應該被註冊在根容器中,而是在發出初始請求的直接容器中。 _「 因此,聽起來像」真「會產生已經描述的視圖模型的已經默認行爲,而」假「(雖然在文檔中未指定)會強制視圖模型自動生成,註冊(作爲一個單身人士)在根容器? –