我有3種嵌套的狀態:角路由和國家處理問題
$stateProvider
.state('A', {
url: '/a',
templateProvider: function ($templateCache) {
return $templateCache.get('pages/a.html');
},
controller: 'aController'
})
.state('A.B', {
url: '/b',
templateProvider: function ($templateCache) {
return $templateCache.get('pages/b.html');
}
controller: 'bController'
})
.state('A.B.C', {
url: '/c',
templateProvider: function ($templateCache) {
return $templateCache.get('pages/c.html');
},
controller: 'cController'
})
比方說,一個是應用程序的初始狀態。現在,當在狀態A中點擊狀態B的鏈接時,調用$ state.go('。B',...),狀態B必須從A獲取參數,因此它可以使用該參數調用某個服務並呈現數據。
同樣,當狀態C點擊一個鏈接狀態B,C必須得到B組參數,因此它可以做正確的工作和顯示數據。
第一個問題:
什麼是要通過這些參數上下行的最佳方式?嵌套控制器是否錯誤,以便父範圍在子範圍中可見?還是應該將它們作爲參數傳遞?
第二個問題(一種依賴於回答第一個):
應如何HTML模板來構造(尤其是關於對「用戶界面視圖」指令),瀏覽器,所以當返回按鈕在來自B之後的狀態C上被點擊,模板B的控制器不被觸發,以便狀態B顯示與在進入狀態C之前相同的數據而不重新加載。
如果用戶已經做出瞭如下轉變:未來將其從A.
第三個問題後,這同樣適用於點擊回到狀態B A-> B-> C,然後導航至一些不相關的狀態D(例如,通過點擊主菜單上的鏈接),然後在狀態D中按下後退按鈕,由於沒有輸入參數,我該如何防止控制器C崩潰?
四問題(有關第三):
前提:唯一的「正確」的方式來獲得狀態B是通過點擊狀態A,同樣獲得到C用戶必須通過先A-> B。
那麼,如何做我處理當用戶手動輸入,例如URL B,從一些零散狀態d?再次,因爲B沒有輸入參數,所有的東西都會崩潰。
謝謝。
感謝您的洞察力,其中一些可能會有所幫助。 – 2015-02-12 08:16:14
再次問候。在玩了一段時間之後,我有一個後續問題:如果我不能/不想使用url params,但是狀態定義的params屬性呢?在這種情況下,我會在後退按鈕上丟失參數。我可以實現某種緩存特定狀態的參數,我可能會這樣做,但如果你知道更好的方法,請分享。謝謝。 – 2015-02-13 11:18:01
基本上,您嘗試記住頁面的狀態,並在導航到頁面時通過其他頁面或直接通過地址欄記住該狀態。回顧一個頁面之間導航的狀態很容易,因爲您可以輸入一些信息來構造狀態。但是,如果您不使用URL參數,那麼當用戶通過地址欄導航到頁面時,如何輸入構建狀態? – restassured 2015-02-13 15:18:21