2013-08-26 74 views
5

我發現我幾乎總是希望跨越路由變化持續作用域,正因爲如此,我發現我幾乎停止使用控制器,除了將所有內容轉發到服務之外。我的控制器都最終看起來像這樣:

app.factory('CtrlAService', function() { 
    return { 
     scope: {}, 
    }; 
}); 

function CtrlA($scope, CtrlAService) { 
    $scope.data = CtrlAService.scope; 

} 

也就是說,所有我的控制器就被一個變量綁定到一個服務變量,而且比結合一兩個功能的其它 - 我不使用任何事物的控制器

這種方法是否正確,如果不正確,那麼完成此操作的更好方法是什麼?

我做了一個示例應用程序的位置:http://jsfiddle.net/Wc22k/1/

+1

我已經走下了這個相同的思維過程,並得出了與你相同的結論。服務處理大部分事情,控制器幾乎不做任何事情。 http://stackoverflow.com/questions/12940974/maintain-model-of-scope-when-changing-between-views-in-angularjs/16559855#16559855 – Anton

回答

2

我覺得這是通常的那種真正的,如果你有一個數據重應用。您需要的功能越多,您的控制器就越多。例如,我在應用程序中使用了google-maps和ng-grid,因此我的所有控制器都包含控制器內的所有配置(有時是標籤顯示的功能等)。此外,我發現並已修改的谷歌地圖代碼(麻省理工學院許可)有一個非常複雜的JavaScript對象,它封裝了谷歌地圖代碼和指令的控制器。

如此短的版本,在數據繁重的應用程序中,大部分代碼都是以服務方式結束,而控制器只是將視圖連接到服務中的某些數據,在其他情況下不是。我看到你對持久化範圍的看法,但我認爲最好將所有視圖必需的邏輯都留在控制器中(我將其視爲視圖模型而不是服務中的數據模型)。它只是將發生在哪裏以及什麼會影響到什麼的清晰分離。例如,如果我需要在某些視圖之間保留一段數據,我將它存儲在服務中(考慮使用「值」,因爲它在語義上和功能上更合適,但是沒有花時間來重新執行此操作)因子)。