5

我发现我几乎总是希望在路由更改中保持范围,因此,我发现我几乎已经停止使用控制器,除了将所有内容转发到服务之外。我的控制器最终看起来像这样:

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

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

}

也就是说,我的控制器所做的只是将一个变量绑定到一个服务变量,除了绑定一个或两个函数——我什么都不使用控制器。

这种方法是否正确,如果不是,有什么更好的方法来实现这一点?

我在这里做了一个示例应用程序:http: //jsfiddle.net/Wc22k/1/

4

1 回答 1

2

如果你有一个数据量很大的应用程序,我认为这通常是正确的。您需要的视图功能越多,您最终在控制器中得到的功能就越多。例如,我在应用程序中广泛使用 google-maps 和 ng-grid,因此我的所有控制器都包含控制器内部的所有配置(有时用于标签显示等功能)。此外,我发现并一直在修改的 google-maps 代码(MIT 许可)有一个非常复杂的 JavaScript 对象,它包装了 google maps 代码和指令的控制器。

这么短的版本,是的,在数据​​繁重的应用程序中,您的大多数代码最终都在服务中,并且控制器只是将视图连接到服务中的某些数据,在其他情况下则不会。我明白你在说什么关于持久化范围,但我认为最好将视图所需的所有逻辑留在控制器中(我认为这是视图模型,而不是服务中的数据模型)。它只是清楚地区分正在发生的事情和正在影响的事情。例如,如果我需要在某些视图之间保留一段数据,我将其存储在服务中(一直在考虑使用“值”,因为它在语义和功能上更合适,但只是没有花时间重新执行此操作-因素)。

于 2013-08-26T00:35:25.177 回答