2016-07-06 76 views
1

我從角路線遷移到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種選擇:

  1. 創建共享數據服務(這似乎是最容易被接受的答案,由於它的Singleton行爲 - 但看看這篇文章末尾的注1
  2. 創建一個父控制器,這樣每個嵌套狀態就可以訪問像列表或要編輯的項目這樣的父屬性。當我點擊「編輯項目」時,listController會更新父級的範圍,formController會隨着這些數據而改變。

注1:當然要檢索列表並更新項目,我已經使用了一個名爲demoService的服務。此服務僅用於ajax請求。所以,如果最好的決定是上面顯示的選項1,我相信我應該用一個新的提案創建一項新服務,對嗎?或者在這個相同的服務中存儲一些局部變量並不壞。 這個新服務將有列表和項目本身,所以當我點擊編輯時,我會更新服務「項目」屬性?

回答

0

我想你已經有了使用服務來存儲數據的答案。

關於帶有新提案的新服務,雖然我不完全確定「提案」的含義,但我假設您指的是與當前不同字段的不同列表?

在這種情況下,這取決於您的代碼的可重用性。如果您的表單足夠相似,或者您可以推廣它,那麼共享相同的服務可能會很好,所以您不必重寫函數。列表和所選項目可以作爲服務中的不同變量存儲。

或者,您還可以將它們存儲在不同的服務中,並將它們的常用功能寫入其他服務中。

+0

感謝您的快速響應! ;)新的「提案」只是指出我所有名爲xxxService的文件都只用於與服務器通信。我從未使用這些文件來存儲不同控制器之間的共享數據。所以回到問題中,我的服務名爲demoService用於我的其他應用程序,共享數據(列表和項目)僅由listController和itemController使用。因此,其他將調用demoService的控制器將不會使用此共享數據(它們僅用於從服務器檢索數據)。 – Germano

+0

我認爲它應該是不同的服務,然後,列表和項目在一個,而在另一個阿賈克斯。列表服務可以在需要獲取數據時調用ajax服務。但是,從我個人的經驗來看,將所有不同的ajax url存儲在一個文件中並不是一個好主意,它會一直增長到有一天它沒有意義。我發現保持各自的服務更清潔。 – Icycool

+0

更新:我最終做了一項新的服務來分享數據並處理一些表單問題。感謝您的幫助 – Germano