Comment usemultiple Angulaire UI Bootstrap Datepicker dans le formulaire unique?
J'ai un formulaire où il y a un besoin pour moi d'avoir 2 ou plusieurs champs de date pour différentes choses. J'ai essayé de l'Angulaire de l'INTERFACE utilisateur de Bootstrap qui fonctionne très bien lorsque j'ai seulement 1 date de champ dans le formulaire. Mais il s'arrête de fonctionner si j'ai plusieurs champs de date et je ne sais pas la méthode la plus simple pour obtenir que cela fonctionne.
C'est mon exemple de code HTML:
<label>First Date</label>
<div class="input-group">
<input type="text" class="form-control" datepicker-popup="{{format}}" name="dt" ng-model="formData.dt" is-open="opened" datepicker-options="dateOptions" ng-required="true" close-text="Close" />
<span class="input-group-btn">
<button class="btn btn-default" ng-click="open($event)"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
</div>
<label>Second Date</label>
<div class="input-group">
<input type="text" class="form-control" datepicker-popup="{{format}}" name="dtSecond" ng-model="formData.dtSecond" is-open="opened" datepicker-options="dateOptions" ng-required="true" close-text="Close" />
<span class="input-group-btn">
<button class="btn btn-default" ng-click="open($event)"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
</div>
Mon JS est:
myApp.controller('DatePickrCntrl', function ($scope) {
$scope.today = function() {
$scope.formData.dt = new Date();
};
$scope.today();
$scope.showWeeks = true;
$scope.toggleWeeks = function () {
$scope.showWeeks = ! $scope.showWeeks;
};
$scope.clear = function () {
$scope.dt = null;
};
//Disable weekend selection
$scope.disabled = function(date, mode) {
return ( mode === 'day' && ( date.getDay() === 0 || date.getDay() === 6 ) );
};
$scope.toggleMin = function() {
$scope.minDate = ( $scope.minDate ) ? null : new Date();
};
$scope.toggleMin();
$scope.open = function($event) {
$event.preventDefault();
$event.stopPropagation();
$scope.opened = true;
};
$scope.dateOptions = {
'year-format': "'yy'",
'starting-day': 1
};
$scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'shortDate'];
$scope.format = $scope.formats[0];
});
Je implémentée sur la base de l'échantillon ici. Le problème que j'ai ici est:
1) Lorsque la date de champ est cliqué, la fenêtre pop-up datepicker est foiré et semble montrer 2 datepicker en 1.
2) Lorsque je supprime is-open="opened"
attribut, la fenêtre pop-up semble bien fonctionner. Mais sans is-open="opened"
, le ng-click="open($event)
pour le bouton ne marche pas.
3), chacun de la date des champs de différents ng-modèles, je suis incapable de le définir par défaut les dates pour tous les champs de date, sauf pour le premier une ng-model="formData.dt"
Le seul moyen de résoudre ce que je peux penser à est de séparer le contrôleur pour chaque champ de date.
Je voudrais savoir comment d'autres personnes de mettre en œuvre plusieurs champs de date dans 1 formulaire lui-même lors de l'utilisation Angulaire UI Bootstrap.
- D'une façon qui pourrait les rendre plus faciles à gérer est de faire une directive pour votre sélecteur de date et de transmettre vos modèles en deux instances de ceux-ci. Il va s'occuper de la portée de votre "ouvrir" de la fonction sans l'ouverture des deux sélecteur de date calendriers à la fois.
Vous devez vous connecter pour publier un commentaire.
J'ai 30 sous une forme un contrôleur pas de problème. utiliser le concept est le même si vous en avez besoin sur ng-repeat.
DatePickrCntrl
contrôleur pour chaque entrée séparément. J'ai 2 questions cependant. (T1) Dans cette méthode, comment puis-je afficher la date d'aujourd'hui pour d'autres champs de date trop? Par exemple, les guichets automatiques neformData.dt
a la date d'aujourd'hui etformData.dtFollowUp
est vide (T2) Si je suis en utilisant le même concept en ng-repeat, comment puis-je ajouter différents ng-les noms de modèle pour chacune des répétitions? J'utilise ces ng-modèles pour l'envoi de données à un fichier php.Solution Plus Simple. Nécessite seulement modding le HTML et peut être utilisé dans un ng-repeat si vous le souhaitez. À faire preuve de créativité avec ce que vous nommez le ouvert
Coller ceci dans votre Contrôleur:
HTML:
wayne's réponse est grande. Je tiens seulement à ajouter, que vous pouvez faire à la fonction "open ()" mieux:
Et puis vous avez à l'utiliser comme ça:
Où dateFrom est votre ng-model (c'est à dire que vous utilisez $champ d'application.dateFrom).
EDIT:
$scope.closeAll();
est une fonction qui ferme tous les datePickers. Il peut être écrit comme ça:$scope.dateFrom = {opened: false};
Je préfère ne pas mélanger les ng-modèle avec INTERFACE utilisateur info.À cette fin, il est nécessaire de définir un tableau pour stocker l'ouverture des drapeaux, ainsi que de vérifier si le datePicker est ouvert ou pas.
De plus, j'ai change la 'ouvrir' comportement 'toggle' au lieu de cela, afin de permettre closinf le datePicker avec le bouton.
Voici mon controller:
Alors il peut être utilisé comme:
Le $scope idée est empruntée à ici:
date1
etdate2
ici. Je pense que, au départ, ils ne sera pas défini si vous ne définissez pas dans le contrôleur, mais en cliquant sur le bouton, ils seront affectés à une valeur. c'était la solution la plus propre pour moiJ'ai résolu mon problème par l'utilisation cette plunker avec des changements mineurs.
HTML
et contrôleur de
mes changements
au lieu de chiffres (0 ou 1) j'utilise
$index
angulaireng-repeat
.comme ceci:
je l'ai utilisé dans une manière différente, et il semble un peu plus facile pour moi. J'ai été en utilisant l'une des approches mentionnées, mais j'étais trop paresseux pour créer des tonnes de calendriers depuis que j'étais en cours j'ai une boucle sans avoir de l'électricité statique de l'identificateur.
Donc cette solution est seulement valide pour vous, si vous voulez créer beaucoup de calendriers à l'intérieur d'une ng-repeat. Espérons que cela aide!
Qui est le contrôleur
Et c'est le HTML ciselée à l'intérieur de ma boucle