用angular JS用控制器逻辑创建一个服务
Creating a service out of controller logic in angular JS
我目前有很多重复的逻辑,我需要在许多不同的控制器中使用,我正在寻找一种方法来做事情的更DRY的方法。
例如,我目前有大约12个控制器,每个控制器都使用一个lazyload函数。每当我想要调整这个函数时,我都必须遍历所有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;
});
正如您所看到的,如果没有这个函数,我将拥有一个更干净、更可读的控制器,并将许多业务逻辑移到服务中。即: 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。活动,否则我可能不需要传递channelID: scope。数字作为参数。这样的东西是如何构成的?
您不需要将作用域传递给服务。相反,您移到工厂中的一些作用域变量仍然可以从控制器的作用域访问:
.factory('LazyLoaded', function() {
var lazy = {
page: 1
};
lazy.someFunction = function() {
console.log('method called');
};
return lazy;
})
.controller('MyController', function($scope, LazyLoaded){
$scope.lazy = LazyLoaded;
console.log($scope.lazy.page); // logs 1
$scope.lazy.someFunction(); // logs 'method called'
})
相关文章:
- 从AngularJS中的另一个文件中的控制器访问服务
- 在http服务单元测试中使用request-js时,chai.request不是一个函数
- AngularJS服务函数调用另一个函数
- 在一个服务中引用多个API调用(Angular)
- 在一个控制器中更新服务变量,并在另一个控制器 - Angular JS中使用更新的值
- AngularJS - 一个文件中的控制器和服务
- 在angularJS中合并来自一个服务的两个数组
- 使用DOM中的信息创建一个控制器/服务来持久化数据
- 通过javascript调用一个C#windows服务函数
- 一个在线服务,我可以查询一个随机的历史人物的名字
- Azure移动服务;插入到另一个表&呼叫'插入'剧本
- 需要将服务/工厂存储为一个值
- 如何在使用typescript的另一个服务中的一个角度服务中使用$rootScope define
- 为一个像球一样的凌空抽射服务
- 如何使用Angular 2服务提供包含指向另一个资源的链接/ids的资源集合
- 当我把服务放在另一个文件上时,Angular会抛出一个错误
- 在Angular 2中的另一个服务中注入自定义服务
- 使用Web服务根据对另一个下拉框的选择填充第二个下拉框以获取信息
- Wordpress创建一个自定义休息服务
- 它有一个库或Web服务,可以为我的javascript应用程序提供夏令时数据