我目前有很多重复的逻辑,我需要在许多不同的控制器中使用它们,我正在寻找一种方法来拥有更 DRY 的做事方法。
例如,我目前有大约 12 个控制器使用延迟加载函数,每个控制器都使用该函数。每当我想调整该功能时,我必须通过所有 12 个(我知道不聪明!)这是一个常见版本的样子:
$scope.number = user.channel_id;
activityFactory.query({channelID: user.channel_id}, function(data){
// the page number
$scope.page=1;
$scope.isInfinitScrollDisabled=false;
// function for inifinite scroll
$scope.getNextPage=function(){
$scope.page++;
$scope.isInfinitScrollDisabled=true;
// query for the next page
activityFactory.query({
channelID: $scope.number,
page: $scope.page
}, function(data){
$timeout(function(){
$scope.isInfinitScrollDisabled=false;
},2000);
$scope.activities.results = $scope.activities.results.concat(data.results);
});
};
$scope.activities = data;
});
正如你所看到的,如果没有这个功能,我将拥有一个更清晰、更易读的控制器,其中很多业务逻辑都移到了服务中。IE:
activityFactory.query({channelID: user.channel_id}, function(data){
$scope.activities = data;
});
问题是我不确定如何将其转化为可重复使用的甲酸盐。我刚开始:
.service('lazyLoaded', ['', function(){
// the page number
$scope.page=1;
$scope.isInfinitScrollDisabled=false;
// function for inifinite scroll
var getNextPage = function(){
$scope.page++;
$scope.isInfinitScrollDisabled=true;
// query for the next page
activityFactory.query({
channelID: $scope.number,
page: $scope.page
}, function(data){
$timeout(function(){
$scope.isInfinitScrollDisabled=false;
},2000);
$scope.activities.results = $scope.activities.results.concat(data.results);
});
};
}])
但是我不确定我是否应该传递 $scope 或如何处理不同的资源,因为并非所有内容都是 scope.activities 或者我可能不需要传递 channelID: scope.number 作为参数。像这样的东西是如何结构化的?