让我们说点击一个按钮(在视图中),要求是:从服务器获取数据。 无论业务逻辑是否
,我都感到困惑i)获取数据和
ii)验证应在控制器内部或工厂内部(或服务部门)进行验证
是否应该放在工厂或控制器中? 请帮忙!!
答案 0 :(得分:14)
控制器的目的是将数据绑定到您的视图。它们不应包含任何逻辑,只能与您的服务进行通信。
homeModule.controller('homeCtrl',function($scope,Categories){
$scope.categories = Categories.items;
});
向您的服务添加一个获取数据并将其存储在自身上的函数:
fetchAll: function(){
var defer = $q.defer();
var self = this;
$http.get(URL})
.then(function(res){
self.data = res.data;
defer.resolve();
});
return defer.promise;
},
(请注意,这只是一种可行的方法。没有什么可以阻止您返回数据而不是将其存储在服务上。根据需要进行操作。)
如果可能,您应该考虑在初始化视图之前获取数据。通过这样做,您可以确保在用户获得页面后立即获得必要的数据。
请参阅$http request before AngularJS app initialises?
https://docs.angularjs.org/guide/services(阅读完整的开发者指南)
http://toddmotto.com/rethinking-angular-js-controllers/
我还推荐官方Tutorial
答案 1 :(得分:2)
您应该将业务逻辑放在服务中。控制器应该只从服务中获取数据并将其绑定到UI。
如果您想了解有关角度最佳做法的更多信息,请在pluralsight.com上推荐此视频:
http://pluralsight.com/training/courses/TableOfContents?courseName=angular-best-practices&highlight=