在路由之间持久化$scope的模式



我发现我几乎总是想在路由更改中保持作用域,正因为如此,我发现除了将所有内容转发到服务之外,我几乎已经不再使用控制器了。我的控制器最终都是这样的:

app.factory('CtrlAService', function() {
    return {
        scope: {},
    };
});
function CtrlA($scope, CtrlAService) {
    $scope.data = CtrlAService.scope;
}

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

这种方法正确吗?如果不正确,还有什么更好的方法可以做到这一点?

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

如果您有一个数据密集的应用程序,我认为这通常是正确的。您越需要视图的功能,控制器中的功能就越多。例如,我在应用程序中广泛使用谷歌地图和ng网格,所以我的所有控制器都包含控制器内部的所有配置(有时是标签显示等功能)。此外,我发现并一直在修改的谷歌地图代码(MIT许可)有一个非常复杂的JavaScript对象,它封装了谷歌地图代码和指令的控制器。

简而言之,是的,在数据密集的应用程序中,大多数代码最终都在服务中,而控制器只是将视图连接到来自服务的一些数据,在其他情况下没有。我明白你所说的持久作用域,但我认为最好把视图所需的所有逻辑都留在控制器中(我认为这是视图模型,而不是服务中的数据模型)。它只是将正在发生的事情和正在影响的事情清楚地分开。例如,如果我需要在某些视图之间持久化一段数据,我会将其存储在服务中(一直在考虑使用"值",因为它在语义和功能上更合适,但只是没有花时间重新考虑)。

最新更新