J'ai une entrée définie comme
<input class="datepicker" type="text" ng-model="clientForm.birthDate" />
Qui est truqué pour être affiché ailleurs sur la page:
<tr>
<th>Birth Date</th>
<td>{{client.birthDate|date:'mediumDate'}}</td>
</tr>
Lorsque la page se charge, la date de naissance est bien formatée comme quelque chose comme Dec 22, 2009
. Cependant, quand je regarde à l'intérieur de mon, <input>
cela montre Tue Dec 22 2009 00:00:00 GMT-0800 (Pacific Standard Time)
comment JS rend les Date
objets sous forme de chaînes.
Premièrement, comment puis-je dire à Angular d'afficher la date dans le <input>
comme quelque chose comme 12/22/2009
? Je n'arrive pas à m'appliquer |filters
à l'intérieur de l' ng-model
attribut.
Deuxièmement, dès que je modifie la date, même en la conservant dans son format d'origine, mon autre texte (à l'intérieur du <td>
) ne semble plus appliquer le |date
filtre; il change soudainement de format pour correspondre à celui de la zone de texte d'entrée. Comment puis-je lui faire appliquer le |date
filtre à chaque fois que le modèle change?
Questions connexes:
Date()
fonctions js standard :$scope.departDate = new Date(); $scope.departTime = $scope.departDate.toTimeString().slice(0, 5);
Et pas besoin d'autres filtres ou de solutions de contournement délicates dans AngularJS IMO.Réponses:
Utilisez la validation personnalisée des formulaires http://docs.angularjs.org/guide/forms Démo: http://plnkr.co/edit/NzeauIDVHlgeb6qF75hX?p=preview
Directive utilisant des formateurs et des analyseurs et MomentJS )
la source
var dateFormat = attrs.moMediumDate;
et nonvar dateFormat = attrs.moDateInput;
moMediumDate ne semble pas être défini nulle part, donc si les entrées ne sont pas créées dynamiquement, un format initial n'est jamais sélectionné.Voici une directive angular-datetime très pratique . Vous pouvez l'utiliser comme ceci:
Il ajoute également un masque à votre entrée et effectue la validation.
la source
datetime="<format>"
valeur d'attribut correspond au format spécifié dans l'dateFormat
option Datepicker .J'ai créé une directive simple pour permettre aux
input[type="date"]
éléments de formulaire standard de fonctionner correctement avec AngularJS ~ 1.2.16.Regardez ici: https://github.com/betsol/angular-input-date
Et voici la démo: http://jsfiddle.net/F2LcY/1/
la source
J'utilise jquery datepicker pour sélectionner la date. Ma directive lit la date et la convertit au format de date json (en millisecondes), stocke les
ng-model
données tout en affichant la date formatée et inversée si ng-model a une date json (en millisecondes), mon formateur s'affiche dans mon format en tant que jquery datepicker.Code HTML:
Directive angulaire:
la source
element.datepicker
parelement.pickadate
Puisque vous avez utilisé datepicker comme classe, je suppose que vous utilisez un datepicker Jquery ou quelque chose de similaire.
Il existe un moyen de faire ce que vous prévoyez sans utiliser du tout moment.js, en utilisant uniquement les directives datepicker et angularjs.
J'ai donné un exemple ici dans ce violon
Extraits du violon ici:
Datepicker a un format différent et le format angularjs est différent, il faut trouver la correspondance appropriée pour que la date soit présélectionnée dans le contrôle et soit également renseignée dans le champ de saisie pendant que le ng-model est lié. Le format ci-dessous est équivalent au
'mediumDate'
format d'AngularJS.La directive d'entrée de date doit avoir une variable de chaîne provisoire pour représenter la forme de date lisible par l'homme.
L'actualisation des différentes sections de la page doit se faire via des événements, tels que
$broadcast
et$on
.L'utilisation d'un filtre pour représenter la date sous une forme lisible par l'homme est également possible dans ng-model, mais avec une variable de modèle temporaire.
la source
J'utilise la directive suivante qui me rend très heureux et la plupart des utilisateurs! Il utilise moment pour l'analyse et le formatage. Cela ressemble un peu à celui de SunnyShah, mentionné plus tôt.
Dans mon formulaire, je l'utilise comme ceci:
Cela liera un horodatage (millisecondes depuis 1970) à
doc.begin
etdoc.end
.la source
ngModel
trouve votre identifiant personnalisé pour l'argument du contrôleur, pas une référence directe et nommée àngModel
. C'est un endroit où la convention de nommer l'argument «ctrl» ou «controller» rend les choses plus claires et évite toute confusion.Dans Angular2 + pour toute personne intéressée:
avec le type de filtres dans DatePipe Angular.
la source
Je préfère que le serveur renvoie la date sans modification, et que javascript fasse le massage de la vue. Mon API renvoie «MM / JJ / AAAA hh: mm: ss» de SQL Server.
Ressource
Manette
Directive de validation myDate
HTML
template / validation / messages.html
la source
Angularjs ui bootstrap, vous pouvez utiliser angularjs ui bootstrap, il fournit également la validation de la date
dans le contrôleur peut spécifier le format que vous souhaitez afficher la date comme datefilter
$ scope.formats = ['jj-MMMM-aaaa', 'aaaa / MM / jj', 'jj.MM.yyyy', 'shortDate'];
la source