Angularjs 如何更改数据过滤器中搜索数据的格式
我有一个表,我用它过滤。其中一列是日期,我喜欢以dd/MM/yyyy的格式显示日期,所以所有的日期列都是这样的,但是当我在过滤器输入中输入日期时,它不知道应该以其他格式搜索,所以它找不到要查找的日期 我尝试过嵌套过滤器但没有成功,有人知道怎么做吗 这是我的密码:Angularjs 如何更改数据过滤器中搜索数据的格式,angularjs,date,filter,Angularjs,Date,Filter,我有一个表,我用它过滤。其中一列是日期,我喜欢以dd/MM/yyyy的格式显示日期,所以所有的日期列都是这样的,但是当我在过滤器输入中输入日期时,它不知道应该以其他格式搜索,所以它找不到要查找的日期 我尝试过嵌套过滤器但没有成功,有人知道怎么做吗 这是我的密码: <input ng-model="filFecha" /> <tr ng-repeat="pedido in pedidos | filter:{codigo:filCodigo, tercero
<input ng-model="filFecha" />
<tr ng-repeat="pedido in pedidos |
filter:{codigo:filCodigo,
tercero:filTercero,
fechaCreacion: ($filter('date')(filFecha, 'dd/MM/yyyy')),
estado:filEstado} |
orderBy: orderProp">
<td class="corta">{{pedido.fechaCreacion | date:'dd/MM/yyyy'}}</td>
<td class="corta">{{pedido.estado}}</td>
</tr>
这里有一个简单的例子:try momentjs他们的库使得格式化日期变得非常简单和容易。因此,当你得到一个输入日期时,只需使用以下代码行:
var formattedDate = moment(inputDate, ['YYYYMMdd', 'MM-dd-YYYY', 'dd-MM-YYYY').format('MM/dd/YYYY');
这将获取输入日期,并尝试将其与字符串数组中的一种格式匹配,如果识别出一种格式,则将其格式化为传递给format函数的字符串
如果$scope.pedido.fechacreation是您尝试格式化的日期,请尝试以下操作:
{{moment(pedido.fechaCreacion, [expectedFormats]).format('MM/dd/YYYY')}}
我已经建立了一个自定义过滤器,我认为它解决了您的问题
myApp.filter('dateFilter', function(){
return function(arr, field){
var filtered = [];
angular.forEach(arr, function(item){
if(moment(item.fechaCreacion).format('DD/MM/YYYY').indexOf(field) > -1)
filtered.push(item);
});
return filtered;
}
});
它循环遍历$scope.pedidos中的每个项目,并使用矩.js将fechacreation转换为所需格式DD/MM/YYYY的字符串。然后检查该字符串中的任何位置是否存在filFecha的值,如果存在,则将其添加到过滤数组中。HTML如下所示:
<tr ng-repeat="pedido in pedidos |
filter:{codigo:filCodigo, tercero:filTercero,
estado:filEstado} |
dateFilter: filFecha |
orderBy: orderProp">
看看。我喜欢自定义过滤器,但想将其扩展为更灵活的过滤器。我也不想使用moment,因为这不是我用来在UI上格式化日期的方式 核对要点 签出JSFIDLE
Hmmm不能处理ng repeat语句,我可以在没有momentjs的情况下使用角度过滤器进行良好的格式化,{{pedido.fechacreation | date:'dd/MM/yyyyy'}这非常有效,问题是filFecha,如果我输入2014年5月29日,它不会被过滤,但2014年5月29日会进行工作{{momentpedido.fechacreation,'dd/MM/yyyyy'}那么也许吧?
angular.module('dateFilter', []).filter('dateFilter', function ($filter) {
return function (array, config) {
if (config === undefined || config.field === undefined || config.format === undefined || config.property === undefined)
return array;
var filtered = [];
angular.forEach(array, function (item) {
if ($filter('date')(new Date(getPropByString(item, config.property)), config.format).indexOf(config.field) > -1)
filtered.push(item);
});
return filtered;
}