javascript - AngularJS - 将重复功能从控制器移动到服务
问题描述
嗨,我是 Angular JS 的新手,我正在尝试重构我的控制器,并希望将重复的多排序功能作为服务移动并在控制器中调用它。
有人可以帮助我将以下功能转换为服务,因为它具有所有 $scope 并且我知道它不能在服务或工厂中使用:
$scope.multiSort = function(columnName){
if($scope.orderByField.includes(columnName)){
if(reverseSortObj[columnName].count == 2){
var index = $scope.orderByField.indexOf(columnName)
$scope.orderByField.splice(index, 1);
delete reverseSortObj.columnName;
return;
}
var indexToReplace = $scope.orderByField.indexOf(columnName);
$scope.orderByField[indexToReplace] = '-'+ columnName;
reverseSortObj[columnName].reverse = !reverseSortObj[columnName].reverse;
reverseSortObj[columnName].count ++;
}
else if($scope.orderByField.includes('-'+ columnName)){
if(reverseSortObj[columnName].count == 2){
var index = $scope.orderByField.indexOf('-' + columnName)
$scope.orderByField.splice(index, 1);
delete reverseSortObj.columnName;
return;
}
var indexToReplace = $scope.orderByField.indexOf('-' + columnName);
$scope.orderByField[indexToReplace] = columnName;
reverseSortObj[columnName].reverse = !reverseSortObj[columnName].reverse;
reverseSortObj[columnName].count ++;
}
else{
reverseSortObj[columnName] = {};
reverseSortObj[columnName].reverse = false;
reverseSortObj[columnName].count = 1;
$scope.orderByField.push(columnName);
}
}
解决方案
如果不想更改代码,可以直接将 $scope 传递给服务并作为范围获取。
下面是一个工作示例,根据您的要求进行了简化。
(function(){
var app = angular.module('App', []);
app.controller('AppController', ['$scope', 'AppService', function($scope, AppService){
$scope.text = 'Hello World';
$scope.columns = ['a', 'c', 'b'];
$scope.sorted = AppService.sort($scope);
console.log($scope.sorted);
}]);
app.service('AppService', [function(){
var service = {};
service.sort = function(scope){
return scope.columns.sort();
}
return service;
}]);
})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div ng-app="App">
<div ng-controller="AppController">{{text}}</div>
</div>
推荐阅读
- javascript - 在 JavaScript 中检查现有数组是否包含所有不同元素的最佳方法?
- loopbackjs - Loopback3 和 Swagger 连接器:加载 swagger 文件时出错
- jquery - 结束日期的jQuery验证奇怪/奇怪的错误大于开始日期
- r - 从R中的URL中提取部分字符串
- c# - 是否可以在没有 ASP.NET 的情况下创建“用户帐户”Windows 应用程序?
- security - Neo4j Bolt:由于身份验证失败,客户端未经授权
- amazon-web-services - 访问 AWS 为已部署资源自动生成的 URL
- spss - 向 SPSS 数据集中的所有变量添加值 + 值标签
- r - 需要 R 函数来比较一个文件中的缺失值并在另一个文件中更新
- python - 使用 psycopg2 的“ELF 文件操作系统 ABI 无效”