我发现我几乎总是希望在路由更改中保留范围,因此,我发现我几乎停止使用控制器,除了将所有内容转发到服务之外。我的控制器最终都看起来像这样:
app.factory('CtrlAService', function() {
return {
scope: {},
};
});
function CtrlA($scope, CtrlAService) {
$scope.data = CtrlAService.scope;
}
也就是说,我的控制器所做的就是将一个变量绑定到一个服务变量,而不是绑定一个或两个函数 - 我不使用控制器来做任何事情。
这种方法是否正确,如果没有,有什么更好的方法来实现这一目标?
我在这里做了一个示例应用程序:http://jsfiddle.net/Wc22k/1/
答案 0 :(得分:2)
我认为如果你有一个数据量很大的应用程序,这通常是正确的。您需要的视图功能越多,您在控制器中的结果就越多。例如,我在应用程序中使用google-maps和ng-grid非常广泛,因此我的所有控制器都包含控制器内部的所有配置(有时用于标签显示等功能)。此外,我发现并且一直在修改的谷歌地图代码(MIT Licensed)有一个相当复杂的JavaScript对象,它包含谷歌地图代码和指令的控制器。
如此短的版本,是的,在数据繁重的应用程序中,大多数代码最终都在服务中,而控制器只是将视图连接到服务中的某些数据,在其他情况下没有。我看到你对持久化范围的看法,但我认为最好留下控制器中视图所需的所有逻辑(我将其视为视图模型而不是服务中的数据模型)。它只是清楚地分离了正在发生的事情和影响事物的因素。例如,如果我需要在某些视图之间保留一段数据,我将其存储在服务中(一直在考虑使用“值”,因为它在语义和功能上更合适但是没有花时间去做这个因子)。