2013-08-26 34 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对象,它封装了谷歌地图代码和指令的控制器。

如此短的版本,在数据繁重的应用程序中,大部分代码都是以服务方式结束,而控制器只是将视图连接到服务中的某些数据,在其他情况下不是。我看到你对持久化范围的看法,但我认为最好将所有视图必需的逻辑都留在控制器中(我将其视为视图模型而不是服务中的数据模型)。它只是将发生在哪里以及什么会影响到什么的清晰分离。例如,如果我需要在某些视图之间保留一段数据,我将它存储在服务中(考虑使用“值”,因为它在语义上和功能上更合适,但是没有花时间来重新执行此操作)因子)。