我從角路線遷移到UI的路由器,我試着去弄清楚什麼是構建最好的選擇以下情形:角UI-路由器最佳實踐:共享數據命名視圖之間
我有一個由兩個嵌套元素組成的通用面板同時顯示:A FORM(呈現在左邊)和一個簡單的LIST(呈現在右邊)。
的形式用於編輯,甚至在列表中創建一個新的項目(該操作是由throught服務使得AJAX調用)
的列表顯示了所有項目,我可以選擇一個他們並點擊「編輯」,然後該項目轉到窗體,我將能夠操縱/更新它。
這裏是我的代碼:
.state('mt.demos', {
abstract: true,
url: '/demos',
views : {
'[email protected]' : {
templateUrl: '....demos.html'
}
}
})
.state('mt.panel', {
url: '',
views: {
'[email protected]': {
templateUrl: '...form.html',
controller : 'formController',
controllerAs : 'vm',
},
'[email protected]': {
templateUrl: '...list.html',
controller : 'listController',
controllerAs : 'vm',
}
}
})
到目前爲止,我結束了與2種選擇:
- 創建共享數據服務(這似乎是最容易被接受的答案,由於它的Singleton行爲 - 但看看這篇文章末尾的注1
- 創建一個父控制器,這樣每個嵌套狀態就可以訪問像列表或要編輯的項目這樣的父屬性。當我點擊「編輯項目」時,listController會更新父級的範圍,formController會隨着這些數據而改變。
注1:當然要檢索列表並更新項目,我已經使用了一個名爲demoService的服務。此服務僅用於ajax請求。所以,如果最好的決定是上面顯示的選項1,我相信我應該用一個新的提案創建一項新服務,對嗎?或者在這個相同的服務中存儲一些局部變量並不壞。 這個新服務將有列表和項目本身,所以當我點擊編輯時,我會更新服務「項目」屬性?
感謝您的快速響應! ;)新的「提案」只是指出我所有名爲xxxService的文件都只用於與服務器通信。我從未使用這些文件來存儲不同控制器之間的共享數據。所以回到問題中,我的服務名爲demoService用於我的其他應用程序,共享數據(列表和項目)僅由listController和itemController使用。因此,其他將調用demoService的控制器將不會使用此共享數據(它們僅用於從服務器檢索數據)。 – Germano
我認爲它應該是不同的服務,然後,列表和項目在一個,而在另一個阿賈克斯。列表服務可以在需要獲取數據時調用ajax服務。但是,從我個人的經驗來看,將所有不同的ajax url存儲在一個文件中並不是一個好主意,它會一直增長到有一天它沒有意義。我發現保持各自的服務更清潔。 – Icycool
更新:我最終做了一項新的服務來分享數據並處理一些表單問題。感謝您的幫助 – Germano