2014-10-17 44 views
1

所以我將這個Plunker作爲演示很好用:http://plnkr.co/edit/Zm9d6zHhrnqDlnJsSZ1I?p=preview。這是一個帶有兩個屬性參數的簡單分頁,它們保存模型狀態和一些配置狀態。我想用一個指令工廠這樣的(或東西,說明如何理性不同)來結束:將指令的控制器拆分成更小的部分

angular.module('mnPagination').factory(function(model, config) { 
    return { 
    model: model, 
    config: config 
    } 
}) 

我當前plunker問題是應用層和指令層不會看起來很相像。由於我只有一個應用程序,我可以使用工廠作爲單身數據提供程序。這非常好!

但是在指令中,我不能使用任何類型的提供者,因爲它將是一個單例。範圍是每個聲明實例的新對象,所以這是唯一可以放置指令中應包含的任何有狀態代碼的地方。

指令應該是無狀態的嗎?

另一個更多的元問題:我是唯一一個嚇壞了嗎?

這是我第二次SO嘗試,並沒有人在Facebook或在工作是真正的MVVM/MVC或指令與孤立範圍。

我是Leya,來做我的盧克!

+0

我想知道是否有能力從指令的控制器訪問範圍父母可能有所幫助?不知道那將是多麼乾淨。 – user1441287 2014-10-17 09:17:20

+1

我想了解你的問題。將控制器分成更小的部分:是關於創建「控制器助手」還是「功能部件」來聚合在一起?你能否詳細說明這一點(我很好奇,這可能對我有用)。 – Bernard 2014-10-19 06:05:41

+0

@ user1441287:對於我來說,父範圍訪問會是徒勞的。我希望儘可能多的分離,以便我可以輕鬆替換代碼,並且更容易理解我的代碼,而無需查看父範圍。 – 2014-10-19 09:04:07

回答

1

所以我解決這個問題的方法是在角廠裏面創建一個工廠。

angular.module('mnPagination').factory('mnPaginationFactory', function() { 
    var factory = function (items, config) { 
    ... 
    } 

    return factory 
} 

現在,我通過調用其對範圍的項目和配置對象控制器工廠得到每個指令的新對象。

這裏的傭兵:http://plnkr.co/edit/DPTZUjeMihsva5nJ3IVx?p=preview

+0

我對這家雙工廠的第一反應是您正在自己製造工廠系統,並圍繞噴油器的供應商系統工作。我的意思是,爲什麼不使用.provider({$ get:function})。它可能會做你正在尋找的多重實例技巧。免責聲明:我沒有測試過,我可能是錯的,這是從文檔推斷。 從文檔:https://docs.angularjs.org/api/auto/service/$provide#provider _「對象:那麼它應該有一個$ get方法。$ get方法將使用$ 「_ – Bernard 2014-10-19 05:54:12

+0

這是我第一個想到的,但提供者。$ get只被調用一次,所以我想我必須爲每個指令實例創建一個新的$注入器,或者打電話給提供者。$多次獲取多少次。 我在.NET DI系統中看到過的,你可以設置注入器來每次給回一個新的實例或者只是一個單例。我現在錯過了這個選擇。 – 2014-10-19 09:12:20