AngularJS中模型内部服务的最佳实践?

AngularJS中模型内部服务的最佳实践?,angularjs,model-view-controller,model,controller,Angularjs,Model View Controller,Model,Controller,我正在使用AngularJS开发一个web应用程序。我在同一个视图中有几个控制器,它们呈现一些中心数据的不同表示。其中一个视图是文本视图,另一个是表视图,第三个是图形视图 在阅读如何使用AngularJS以最优雅的方式实现这一点时,我将我的模型集中在一个服务中,该服务通过getter允许控制器获取对模型的引用。使用这种方法,当该中心模型中发生任何变化时,视图会随着AngularJS的内部魔力完美地自我更新,因为模型会暴露在每个控制器上的作用域中 但是我收到了其他开发人员的一些评论,认为这种方法不

我正在使用AngularJS开发一个web应用程序。我在同一个视图中有几个控制器,它们呈现一些中心数据的不同表示。其中一个视图是文本视图,另一个是表视图,第三个是图形视图

在阅读如何使用AngularJS以最优雅的方式实现这一点时,我将我的模型集中在一个服务中,该服务通过getter允许控制器获取对模型的引用。使用这种方法,当该中心模型中发生任何变化时,视图会随着AngularJS的内部魔力完美地自我更新,因为模型会暴露在每个控制器上的作用域中

但是我收到了其他开发人员的一些评论,认为这种方法不是好的实践。他们建议控制器只向控制器提供模型的副本,如果模型发生更改,控制器应填充事件,以便控制器请求更新模型的新副本。对我个人来说,这感觉就像给一个实现增加了复杂性,在AngularJS之上重新发明了轮子,AngularJS通过自己的脏检查自动为我处理一些事情

在服务中引用模型真的是一种糟糕的做法吗?若然,原因为何

在我看来,建议的事件想法是非常糟糕的做法,因为它迫使我在$rootScope上广播事件,因为服务没有自己的作用域。尝试这种想法会导致应用程序中的视图更新明显慢得多,AngularJS必须做更多的工作才能获得相同的结果(广播事件,在每个控制器中添加事件处理程序,创建并返回同一模型的多个副本,在每个控制器作用域中设置这些不同的副本,以便AngularJS仅在脏检查时作出反应)

看看你们这些家伙对这个话题的感受会很有趣


祝大家新年快乐!

服务应返回您的查询结果,如:

function getData() {
    return $http.get("/user/123");
}
控制器应使用该数据:

$scope.userInfo = [];

yourService.getData().then(function (result) {
    $scope.userInfo = result.data;
}
你写道:

他们建议控制器只向控制器提供模型的副本,如果模型发生更改,控制器应填充事件,以便控制器请求更新模型的新副本

我不知道这是否算是一种不好的做法,我肯定不会这样做。正如你所提到的,Angular已经在管理模型更改时触发的事件,所以我同意你的看法,这是一件额外的不必要的事情,但我可能被证明是错的


以下是一些很好的指导原则,也许您可以在项目中使用它们:

服务应返回查询结果,如:

function getData() {
    return $http.get("/user/123");
}
控制器应使用该数据:

$scope.userInfo = [];

yourService.getData().then(function (result) {
    $scope.userInfo = result.data;
}
你写道:

他们建议控制器只向控制器提供模型的副本,如果模型发生更改,控制器应填充事件,以便控制器请求更新模型的新副本

我不知道这是否算是一种不好的做法,我肯定不会这样做。正如你所提到的,Angular已经在管理模型更改时触发的事件,所以我同意你的看法,这是一件额外的不必要的事情,但我可能被证明是错的

以下是一些很好的指导原则,也许您可以在项目中使用它们: