我的反应是,听起来您正在尝试将控制器用作服务,并且您正在尝试将多个功能集成到一个控制器中。
因此,您应该考虑两件事。首先,创建控制器非常重要,每个控制器仅具有一个特定的 目的 。请注意,这 不是
一回事使用控制器只有一次,你encuraged如果有应该出现在不止一个地方的特征使用相同的控制器在几个不同的地方。这仅意味着控制器不应一次执行多项操作。
让我们以照相馆为例。虽然您可以创建一个控制器来获取所有照片,让您添加新照片,并让您一并编辑和删除现有照片,但这不是一个好主意。如果您决定也可以从另一个页面“页面X”添加照片怎么办?如果您要在哪里重复使用同一控制器,那么您还需要从服务器请求图库,并为不希望出现在该页面上的内容设置控件。
如果改用一个仅负责获取内容的控制器,一个单独的控制器来添加新照片,另一个用于编辑等等,那么这将很容易。您只需在“第X页”上实现create-
controller,而不必担心意外触发的次数超出了您的期望。您可以选择 仅
在页面上完全实现所需的功能。这也使您的控制器小巧,易于阅读并且可以快速编辑/修正错误,因此双赢!
其次,如果您想将所有CRUD资源收集到一个对象中(我也想这样做),则它们不应位于控制器中,而应位于 服务中
。因此,您有一个PhotoAPI,它公开了CREATE,READ,UPDATE和DELETE函数。然后,您的索引控制器仅调用READ函数,而您的创建控制器则调用CREATE函数,等等。这些控制器定义哪些函数和数据在何处可用,但逻辑在组合服务中。这样,您可以集中资源以使其易于查找,而不会因使用组合控制器而产生问题。
所以像这样:
app.service('PhotoAPIService', [function() { this.READ = function() { // Read logic } this.CREATE = function() { // Create logic }}]);app.controller('PhotoIndexController', ['$scope','PhotoAPIService',function($scope, PhotoAPIService) { $scope.photos = PhotoAPIService.READ(<data>);}]);app.controller('PhotoCreateController', ['$scope','PhotoAPIService',function($scope, PhotoAPIService) { $scope.createPhoto = PhotoAPIService.CREATE;}]);


