2015-09-15 60 views
0

我正在使用角度UI網格。起初,我在一個控制器中實現了這一點,並且在我的所有定製完成後它工作正常。當我使用多個網格時,我無法每次都寫一個很長的控制器。所以,我把它轉換成了工廠。我保留了工廠和列定義中的常用功能以及控制器中的數據。現在當我在一個以上的控制器中使用這個工廠時,最後一個控制器覆蓋所有其他控制器。 1)在工廠製造這個電網是否正確? 2)如果是,我該如何克服這個問題? 3)通過使用這個網格的工廠,我的gridObj.gridApi.pagination.on拋出錯誤(gridObj是我返回的單例對象)。在多個控制器中使用角度工廠

任何建議是值得歡迎的。提前致謝。

回答

0

您應該改用指令。工廠創建一個單一的即時(見Angular Provider Documentation並不會創建一個私有的範圍,你需要不重寫數據

;注:角的所有服務都是單身

但指令規定私人。範圍和創建新實例每次如果你想他們,他們被稱爲在HTML時間。

//directive 
scope: { // this option creates isolated scopes 
    something : '=', 
}, 

我創建了一個Plunkr展示一個可能的設置,對於一些書面詳情請看我的answer from few days ago

你的HTML可能是這樣的事後

<my-grid options="all.firstOptions" class="grid"></my-grid> 

哪裏my-grid是你的指令,並options=""是你的特殊設置(和其他任何你希望的指令使用)。在你的指令中,你聲明瞭默認設置並將它們與特殊的設置合併。

scope.gridOptions = { 
      data: scope.options.data, //private scoped from options : '=', 
      columnDefs: scope.options.colDef || defaultColDef, // optional setting or default setting 
      // ... some more default data 
     }; 

如果您有任何具體問題,請告訴我。

+0

謝謝你回答我的問題,但它並沒有解決我的問題。我也有一個指令來加載網格模板。我已經提到每個網格都有自己的列和數據,其餘的功能保持不變。任何用例所需的任何東西,開發人員都會在控制器中編寫自己的功能。這應該是什麼方法? – Scriptner

+0

對不起,我不明白你的問題。在你的問題中使用工廠不起作用,你需要一個指令。如果你想用相同的基本配置創建不同的網格(數據,列等),你可以使用我的方法。請嘗試更具體地瞭解您的需求。 – CMR

+0

我在http://plnkr.co/edit/FuwHnrUjCBJ0BgQ2UM5k?p=preview中添加了我的示例。第二個網格標題被覆蓋到第一個網格標題。如果取消註釋gridApi.pagination的代碼,則會拋出錯誤。請看看這個並幫助我。謝謝。 – Scriptner