angularjs - array - ng-init
Angular JS filtro de fecha no funciona (5)
Tengo un elemento ng-repeat
que recorrerá el resultado de $http.get()
.
<tr ng-repeat="blog in posts">
<td style="text-align:center">{{ $index+1 }}</td>
<td>{{ blog.title }}</td>
<td>
{{ blog.author.name }}
</td>
<td>
{{ blog.created_at | date:''MMM-dd-yyyy'' }}
</td>
</tr>
He created_at
como timestamp
de timestamp
en la tabla de base de datos MySQL. Y estoy usando angular.js v1.0.7
.
Obtengo la misma salida de la tabla db y el filtro de fecha no funciona. ¿Como puedo resolver esto?
Mi llamada ajax,
$http({method: ''GET'', url: ''http://localhost/app/blogs''}).
success(function(data, status, headers, config) {
$scope.posts = data.posts;
}).
error(function(data, status, headers, config) {
$scope.posts = [];
});
Cuando la variable de fecha de registro recuerde usar la palabra clave "nueva" como se muestra a continuación
var time = new Date();
De lo contrario si escribes así:
var time = Date();
La fecha se llama como una función y se devolverá una cadena de fecha y hora que no se puede utilizar como entrada para el filtro.
Desde el lado del servidor, devuelve el created_at
como cadena desde el elocuente de laravel.
Esto se puede resolver utilizando este javascript,
new Date("date string here".replace(/-/g,"/"));
Así que el código,
$http({method: ''GET'', url: ''http://localhost/app/blogs''}).
success(function(data, status, headers, config) {
angular.forEach(data.posts, function(value, key){
data.posts[key].created_at = new Date(data.posts[key].created_at.replace(/-/g,"/"));
}
$scope.posts = data.posts;
}).
error(function(data, status, headers, config) {
$scope.posts = [];
});
La fecha pasada al filtro debe ser de tipo javascript Fecha .
¿Has comprobado cuál es el valor blog.created_at
se muestra sin el filtro?
Usted dijo que su servicio respaldado está devolviendo una cadena que representa la fecha. Puedes resolver esto de dos maneras:
- Haga que su código del lado del servidor devuelva un objeto de fecha json
- verifique cómo el código del lado del servidor serializa el json que devuelve
- Escriba su propio filtro que acepte la fecha de la cadena y la fecha de devolución en el formato requerido
- Nota : puedes llamar al filtro angular en tu propio filtro.
Puedes escribir tu propio filtro de la siguiente manera:
app.filter(''myDateFormat'', function myDateFormat($filter){
return function(text){
var tempdate= new Date(text.replace(/-/g,"/"));
return $filter(''date'')(tempdate, "MMM-dd-yyyy");
}
});
Y úsalo así en tu plantilla:
<td>
{{ blog.created_at | myDateFormat }}
</td>
En lugar de recorrer la matriz devuelta y luego aplicar el filtro
Puede crear una new Date(/*...*/)
basada en datos obtenidos de $http.get
, como:
$scope.date = new Date(''2013'', ''10'', ''28''); // for example
De todas formas puedes ver esta Demo en Plunker .
Espero que te ayude
puede agregar un filtro personalizado que convierta la cadena a la fecha, como el siguiente código:
app.filter(''stringToDate'',function ($filter){
return function (ele,dateFormat){
return $filter(''date'')(new Date(ele),dateFormat);
}
})
luego use este filtro en cualquier plantilla como el siguiente código:
<div ng-repeat = "a in data">{{a.created_at |stringToDate:"medium"}}</div>