我正在研究一個相當複雜的AngularJS Web應用程序,並且未能實現滿足我需求的工作模式/路由機制。Angular modals(ui-router)和一般模態體系結構概念
形勢
我的應用程序(簡體)以下實體:
- 客戶(有0個或多個聯繫人)
- 訂單(有且只有1客戶)
- 聯繫(屬於1個客戶)
在創建新訂單的過程中,可以選擇現有客戶,也可以創建新客戶。在客戶的創建過程中,可以選擇創建新的聯繫人。
UI/UX的解決方案
我看了幾種方法來正確地代表了「非雜亂」和移動友好的方式這個功能。首先,我試圖完全遠離模式或彈出窗口,並嘗試創建幾個Angular指令以在頁面中動態顯示,但這很快就變得太複雜了。新客戶的創建存在多個UI狀態和一些子狀態(選項卡),並且具有相當複雜的邏輯。
然後我使用單獨的瀏覽器標籤查看並使用localStorage在它們之間進行通信。然而,這種方法似乎很脆弱,對於用戶來說也不是很常見。此外,用戶應該繼續在新選項卡中工作直到完成,然後才能夠返回到之前的選項卡。這是不可能使用單獨的瀏覽器選項卡。
我看過Javascript瀏覽器的彈出窗口,但我不喜歡那個方向。
從一個用戶的角度,我認爲最好的方法是使用一個模式對話框跟隨UI流程:
UI流
+----------+ +------------+ +-----------+
|New Order | - Opens modal -> |New Customer| - Opens modal -> |New Contact|
+----------+ +------------+ +-----------+
^ | ^ |
| OK | OK
| Closes modal and | | Closes modal and |
| selects new customer | | selects new contact |
+----<-----<-------<-----<---+ +----<-----<-------<-----<----+
注:新的客戶和新的聯繫人狀態本身也是可以在常規窗口中打開的狀態。
我創建角-UI-路由器的路由爲:
- 新秩序:app.orders.new
- 新客戶:app.customers.new
- 新建聯繫人:app.contacts。新
發展
爲了支持多種模式的架構我已經試過幾件事情:
- 使用Angular UI Bootstrap Modal
- 使用使用自己的內置模式窗口
請注意以下幾個重要方面:
- 我不需要直接URL來直接指向模態窗口。網址可以保留在「新客戶」狀態。
- 行爲應該是Modal,所以不能在父窗口上工作。
- 它應該能夠彼此打開並顯示多個狀態(例如一個Modal中的嚮導)
- 以特定順序打開的多個模式應該以相同的順序關閉。 (後進先出)
1.使用Angular UI Bootstrap Modal 這種方式似乎很有希望。我創建了使用定期航線的一些控制器和視圖一個單獨的路由:
- Modal.Customers.New
- Modal.Contacts.New
但不幸的是我掙扎開模態內部有更多的模態,並保持之前模態的狀態。我已經使用UI-Router-Extras粘滯狀態來保持背景狀態。然而,隨着UI路由器額外狀態,粘滯狀態僅適用於每個狀態都有自己的UI視圖。應該事先聲明ui-view。這是不可能的,因爲理論上用戶可以在我的應用程序中打開無限量的嵌套模式。
2.使用UI-Router-Extras方式使用自己的內置模式窗口
我試着用UI的路由器,額外的簡單模態例如在創建在角UI莫代爾代替一個簡單的模式: http://plnkr.co/edit/qgt0RkEnXDPDTdMJPIfy?p=info
但不幸的是我有與選項1相同的問題。問題是狀態和路由變得太複雜,當模式嵌套。
解決方案
我真的很掙扎什麼是最好的辦法了。我正在考慮顯示一個帶有iframe的Modal覆蓋窗口,它打開一個單獨的UI-Router路由,如:Modal.Customers.New,它只顯示應用程序的內容(而不是菜單欄等)。
當使用iframe時,我可以在父窗口和iframe上保留獨立的路由和狀態信息。我需要執行一些自定義javascript來支持將iframe轉換爲正確的格式,但這是可以接受的。
但它仍然感覺像一個「黑客」的解決方案。
我很想聽聽您的解決方案和見解。