我想你對views
和states
的基本定義感到困惑。這就是說,你的理解(對你自己的問題陳述)是正確的。
在ui-router
中,它將您的應用程序變爲狀態機的基本原理。狀態機的基本定義是,在任何時間點,只有一個state
可以保持活動。這實際上非常有用,也是一個很好的設計模式 - 從某種意義上說,當它處於明確定義的狀態時,您可以定義機器(或應用程序)應該執行的操作(或應該如何操作)。也適合調試。
但是,這並不意味着在單一狀態下,機器不能做多件事情。它可以,只要在那個狀態下,它的工作就是做很多事情。以電影預約應用程序爲例。
免責聲明:這是不完全真實的狀態圖還是讓我們只是用它進行討論的目的。圖片由Google搜索提供
現在所有藍色圓角矩形框都是狀態。意思是,當用戶使用該應用時,在任何時間點,他/她都將處於其中一個狀態 - 他必須,否則他不使用該應用。
現在可以很快就意識到,如果用戶在SeatsChoosing
狀態,他CAN NOT在其他國家 - 不是PromotionSelection
,不Payment
,或其他州,同時。他可以去其他國家(稱爲國家轉型),說PromotionSelection
,但只有在他選擇完成後。問題是,不超過一個國家在這裏活躍,也不是平行國家。一次只有一個。
雖然它一次只能處於一個活動狀態,但這並不意味着機器無法在單一狀態下執行多個任務。以SeatsChoosing
狀態爲例。在SeatsChoosing
狀態下,執行多個任務,包括加載電影,獲取位置,顯示時間表等。但是隻有當用戶處於01狀態時,用戶纔會體驗所有這些事情。關鍵是你可以在單一狀態下同時執行多個任務,只要你的狀態定義允許。
而這正是ui-router
正在實現的。在您的應用的任何時間點,您只能有一個狀態處於活動狀態。嵌套狀態本身仍然是一個單一的狀態,它實際上是一個節點遍歷狀態機 - 當你到達該節點時,只有該節點處於活動狀態。不允許平行狀態。同樣的道理,這並不意味着你的國家一次不能做多件事情。這就是named views
的目的。對於一個國家來說,你可以擁有不同的視圖,這些視圖具有不同的明確定義的上下文(視圖),它們都屬於同一個域(狀態),成爲一把大傘。
現在讓我們回到您的搜索結果問題陳述。你如何定義你的狀態,以及如何定義你的觀點?這完全取決於你,但只要確保你使用的是ui-router
,你就堅持狀態機的規則 - 也就是沒有並行狀態,但允許並行任務。所以,如果你定義一個狀態是一個頁面,它可以完成許多事情 - 認證,自動完成等等,那麼是的,多個命名視圖是正確的方式,而不是嵌套狀態。但是,如果將search
和search results
分隔爲兩個不同的域,那麼嵌套狀態可能會更好。
對此沒有正確和錯誤的答案,只是設計決定的問題。
希望有所幫助。
有可能有多個命名視圖的嵌套狀態? – user3125823
@ user3125823是的。嵌套狀態仍然是一個狀態;並且一個狀態總是可以有多個命名的視圖。 – CozyAzure
我已經準備好了你的答案几次,真的很好,很簡潔 - 幫助很大。感謝您花時間回答您的問題! – user3125823