当我格式化 html 中的内容时,orderBy 不起作用
orderBy is not working, when i formatted the content in the html
<tr ng-repeat="data in PackagesData | orderBy : filterOption">
<td>{{data.name}}</td>
<td>{{data.packageType}}</td>
<td>{{convertDateFormatNormal(data.createdDate)}}</td>
</tr>
$scope.convertDateFormatNormal = function (date) {
if(date){
var dateFormatChange = new Date(date);
var dateChanged = $filter('date')(dateFormatChange, "dd/MM/yyyy");
return dateChanged;
}
};
orderBy 中的 filterOption 可以是任何名称、packageType 或 createdDate。但是名称和包类型按预期工作但 orderBy 不适用于 createdDate 因为我将日期格式从 mm/dd/yyyy 转换为 dd/mm/yyyy 以显示在 HTML 中,它仍然只在 [=14= 中排序] 命令。
在angularjs中,排序是根据scope变量的格式,而不是html中的打印格式。如果你想使用 dd/mm/yyyy 格式对其进行排序,你必须在你的 js 文件中格式化日期并将其存储在像 'modified_date' 这样的键中通过循环遍历 'PackagesData' 对象然后键入 { {modified_date}} 在 html 中并按 'modified_date' 过滤。
有一次我遇到同样的问题,但我是这样解决的。
此示例基于 orderBy
并侧重于按完整日期排序,如果我们 array
像这样:
[
{ createdDate: "2007-04-01T14:30" },
{ createdDate: "2006-01-05T14:30" },
{ createdDate: "2018-06-06T14:30" },
{ createdDate: "2015-03-08T14:30" },
{ createdDate: "2010-02-11T14:30" },
{ createdDate: "2010-01-12T14:30" }
];
顺序应该是 yyyy
,然后是 MM
,最后是 dd
,根据这个描述,我们必须创建自定义函数,将我们的日期转换为一行,例如:
If we have 05/01/2006 => "dd/MM/yyyy"
it should be 20060105 => "yyyyMMdd
记住 结果应该是 int
而不是 string
var app = angular.module("app", []);
app.controller("ctrl", ["$scope", "$filter", function($scope, $filter) {
$scope.array = [{
name: "John",
packageType: 1,
createdDate: "2007-04-01T14:30"
},
{
name: "Mike",
packageType: 2,
createdDate: "2006-01-05T14:30"
},
{
name: "Mike",
packageType: 2,
createdDate: "2018-06-06T14:30"
},
{
name: "Mike",
packageType: 2,
createdDate: "2015-03-08T14:30"
},
{
name: "Mike",
packageType: 2,
createdDate: "2010-02-11T14:30"
},
{
name: "Mike",
packageType: 2,
createdDate: "2010-01-12T14:30"
}
];
$scope.orderByFullDate = function(object) {
var x = object.createdDate.split('/');
var y = "";
if (angular.isDefined(x[1])) {
y = x[2] + x[1] + x[0];
}
return parseInt(y); //result of '05/01/2006' is: 20060105
};
$scope.convertDateFormatNormal = function(object) {
if (object) {
var dateFormatChange = new Date(object.createdDate);
var dateChanged = $filter('date')(dateFormatChange, "dd/MM/yyyy");
object.createdDate = dateChanged;
}
};
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<div ng-app="app" ng-controller="ctrl">
<ul class="list-group">
<li class="list-group-item" ng-repeat="object in array | orderBy:orderByFullDate" ng-init="convertDateFormatNormal(object)">
{{object.createdDate}}
</li>
</ul>
</div>
<tr ng-repeat="data in PackagesData | orderBy : filterOption">
<td>{{data.name}}</td>
<td>{{data.packageType}}</td>
<td>{{convertDateFormatNormal(data.createdDate)}}</td>
</tr>
$scope.convertDateFormatNormal = function (date) {
if(date){
var dateFormatChange = new Date(date);
var dateChanged = $filter('date')(dateFormatChange, "dd/MM/yyyy");
return dateChanged;
}
};
orderBy 中的 filterOption 可以是任何名称、packageType 或 createdDate。但是名称和包类型按预期工作但 orderBy 不适用于 createdDate 因为我将日期格式从 mm/dd/yyyy 转换为 dd/mm/yyyy 以显示在 HTML 中,它仍然只在 [=14= 中排序] 命令。
在angularjs中,排序是根据scope变量的格式,而不是html中的打印格式。如果你想使用 dd/mm/yyyy 格式对其进行排序,你必须在你的 js 文件中格式化日期并将其存储在像 'modified_date' 这样的键中通过循环遍历 'PackagesData' 对象然后键入 { {modified_date}} 在 html 中并按 'modified_date' 过滤。 有一次我遇到同样的问题,但我是这样解决的。
此示例基于 orderBy
并侧重于按完整日期排序,如果我们 array
像这样:
[
{ createdDate: "2007-04-01T14:30" },
{ createdDate: "2006-01-05T14:30" },
{ createdDate: "2018-06-06T14:30" },
{ createdDate: "2015-03-08T14:30" },
{ createdDate: "2010-02-11T14:30" },
{ createdDate: "2010-01-12T14:30" }
];
顺序应该是 yyyy
,然后是 MM
,最后是 dd
,根据这个描述,我们必须创建自定义函数,将我们的日期转换为一行,例如:
If we have
05/01/2006 => "dd/MM/yyyy"
it should be20060105 => "yyyyMMdd
记住 结果应该是 int
而不是 string
var app = angular.module("app", []);
app.controller("ctrl", ["$scope", "$filter", function($scope, $filter) {
$scope.array = [{
name: "John",
packageType: 1,
createdDate: "2007-04-01T14:30"
},
{
name: "Mike",
packageType: 2,
createdDate: "2006-01-05T14:30"
},
{
name: "Mike",
packageType: 2,
createdDate: "2018-06-06T14:30"
},
{
name: "Mike",
packageType: 2,
createdDate: "2015-03-08T14:30"
},
{
name: "Mike",
packageType: 2,
createdDate: "2010-02-11T14:30"
},
{
name: "Mike",
packageType: 2,
createdDate: "2010-01-12T14:30"
}
];
$scope.orderByFullDate = function(object) {
var x = object.createdDate.split('/');
var y = "";
if (angular.isDefined(x[1])) {
y = x[2] + x[1] + x[0];
}
return parseInt(y); //result of '05/01/2006' is: 20060105
};
$scope.convertDateFormatNormal = function(object) {
if (object) {
var dateFormatChange = new Date(object.createdDate);
var dateChanged = $filter('date')(dateFormatChange, "dd/MM/yyyy");
object.createdDate = dateChanged;
}
};
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<div ng-app="app" ng-controller="ctrl">
<ul class="list-group">
<li class="list-group-item" ng-repeat="object in array | orderBy:orderByFullDate" ng-init="convertDateFormatNormal(object)">
{{object.createdDate}}
</li>
</ul>
</div>