4

J'utilise ui.bootstrap.datepickerPopup dans un modèle d'en-tête de filtre à l'intérieur de ui.grid. Cela me permet de filtrer les lignes par date. J'ai également un bouton dans le menu de la grille qui permet de basculer grid.options.enableFiltering.UI Bootstrap datepicker dupliqué lors de l'ajout au corps

En raison de problèmes d'alignement avec ui-grid, j'ai datepicker-append-to-body mis à vrai pour mes datepickers. La première fois que j'active le filtrage, tout fonctionne correctement. Cependant, lorsque je désactive le filtrage et que je le réactive, je reçois des duplicateurs de date.

C'est ce que le problème ressemble:

Je pense que le problème est que chaque fois que les filtres sont activés, est ajouté au DOM et n'a jamais retiré la div suivante lorsque les filtres sont désactivés.

<div uib-datepicker-popup-wrap="" 
    ng-model="date" 
    ng-change="dateSelection(date)" 
    template-url="uib/template/datepickerPopup/popup.html" 
    class="ng-pristine ng-untouched ng-valid ng-scope ng-empty ng-valid-date-disabled" 
> 
    <!-- ngIf: isOpen --> 
</div> 

Voici une plunker simplifiée:http://plnkr.co/edit/eYZt87j2O6A5xhjHj5ZG
Je reçois le même problème si j'utilise un seul datepicker dans l'en-tête de filtre Time Range.

Toutes les idées sont grandement appréciées! Je ne veux pas utiliser jQuery.

+0

Ceci est saturé. Lorsque vous basculez les options de filtre, il continue à ajouter 2 datepicker dans le corps chaque fois .. J'ai fait basculer l'option de filtre de la grille 4 fois et j'ai vu 8 uib-datepicker dans DOM a été ajouté. Aussi une autre question intéressante est, pourquoi il montre seulement 2 datepicker un lorsque vous ouvrez le filtre: D –

Répondre

1

Je n'ai pas de réponse sur les raisons de ce qui se passe mais une solution sans jQuery serait de supprimer les fenêtres pop-up lors du déclenchement de la bascule de filtre à l'aide document.querySelectorAll()

var elements = document.querySelectorAll("div[uib-datepicker-popup-wrap]"); 
Array.prototype.forEach.call(elements, function(node) { 
    node.parentNode.removeChild(node); 
}); 

Plunker here

+1

Votre solution est une solution de contournement, merci! Pour quiconque lira ceci dans le futur, vous pouvez le lancer dans le '$ onInit' d'une directive sur un' span' en enveloppant '.ui-grid-filter-container' pour le rendre un peu plus propre. –