2014-09-24 9 views
10

Sembra che dovrebbe essere semplice ma mi ha eluso. Vorrei convertire la mia stringa di data in un oggetto data e filtrare il modo in cui viene visualizzata.Come si usa un filtro data in ng-model?

Ho una semplice applicazione angolare e il controller

myApp.controller('myAppCtrl', function($scope) { 
    $scope.MyDate = Date("2014-09-23T15:26:49.1513672Z"); 
}) 

ho JSON restituito dal server e la data con cui sto lavorando è una stringa nel formato sopra

dalla documentazione angolare attorno date filters

<span>{{1288323623006 | date:'medium'}}</span><br> 

questo funziona e il fuori messo è: 28 ottobre 2010 20:40:23

Quando provo ad usare il filtro $ scope.MyDate come segue:

{{MyDate | date:'medium'}} 

la data non è formattato, ma assomiglia a questo: Mer 24 Set 2014 07:40:02 GMT-0700 (Pacific Daylight Time)

In ultima analisi vorrei associare una casella di testo di input a questo valore e filtrare in questo modo:

<input type="text" class="form-control" ng-model="MyDatee | date:'medium'"/> 

spero una volta che ottengo la versione semplice di lavoro posso avere il mio pr reale oblem risolto con l'input di testo.

Ecco un plunker with the above code

risposta

14

Per la prima parte, utilizzare new Date() invece:

$scope.MyDate = new Date("2014-09-23T15:26:49.1513672Z"); 

In secondo luogo, è possibile creare una direttiva per formattare il modello nella input (modificato da here)

Il markup è il seguente:

<input type="text" class="form-control" ng-model="MyDate" formatted-date format="medium" /> 

e la direttiva è come:

angular.module('myApp').directive('formattedDate', function(dateFilter) { 
    return { 
    require: 'ngModel', 
    scope: { 
     format: "=" 
    }, 
    link: function(scope, element, attrs, ngModelController) { 
     ngModelController.$parsers.push(function(data) { 
     //convert data from view format to model format 
     return dateFilter(data, scope.format); //converted 
     }); 

     ngModelController.$formatters.push(function(data) { 
     //convert data from model format to view format 
     return dateFilter(data, scope.format); //converted 
     }); 
    } 
    } 
}); 

V. aggiornamento plunkr

+0

Questo è grande. Può esserci un'estensione per convalidare anche i dati? – Kangkan

4

nel $ scope.MyDate si prega di sostituirlo con

$scope.MyDate = new Date("2014-09-23T15:26:49.1513672Z"); 
0

faccio solo tu nuovo spettacolo una data, è possibile utilizzare un filtro di valore.

0

È possibile modificare il formato della data come questo

<input type="text" class="form-control" value="{{MyDatee | date:'medium'}}"/>