2014-10-04 18 views
18

Pracuję z datepicker kątowy-ui i wszystko działa poprawnie, z wyjątkiem stanu początkowego datepicker. Po wybraniu daty wygląda dobrze. Patrz poniżej:angular-ui datepicker początkowy stan datepicker nie sformatowany na datepicker-popup

Stan początkowy

enter image description here

Po wybraniu daty w selektorze

enter image description here

więc wyraźnie Otrzymuję strigified wersję obiekt daty w pierwszym przypadku i sformatowany po wybraniu daty.

znaczników

<input type="text" class="form-control" 
     id="birthday" 
     datepicker-options="datePickerOptions" 
     datepicker-popup="{{format}}" 
     data-ng-model="birthday" 
     data-is-open="opened" 
     data-ng-required="true" 
     data-close-text="Close"/> 

<span class="input-group-btn"> 
    <button type="button" 
      class="btn btn-default" 
      data-ng-click="open($event)"> 
     <i class="fa fa-calendar"></i> 
    </button> 
</span> 

Kontroler

var today = $scope.today = function today() { 
    $scope.birthday = $scope.client.birthday || new Date(); 
}; 
today(); 

$scope.clear = function clear() { 
    $scope.dt = null; 
}; 

$scope.open = function($event) { 
    $event.preventDefault(); 
    $event.stopPropagation(); 

    $scope.opened = true; 
}; 

$scope.format = 'MMM d, yyyy'; 
$scope.datePickerOptions = { 
    'show-weeks': false 
}; 

Nie jest to wielka sprawa, ale byłoby naprawdę miło, gdyby model (który musi być data obiekt za docs) został sformatowany zgodnie z $scope.format na początku, a nie jako obiekt o określonym znaczeniu. Ponadto, nie jesteśmy pewni, że to robi różnicę, ale ten datepicker jest wewnątrz modalu. Dzięki za pomoc!

UPDATE

Wygląda na to, że nie jestem jedynym, doświadcza tego, a jest to związane z użyciem kątowe 1.3. https://github.com/angular-ui/bootstrap/issues/2659

Odpowiedz

0

Innym obejść, że pracował dla mnie, poza tym taka jak opisana w kwestii github, ma zainicjować modelu z czasem epoki w milisekundach, a nie obiekt daty, np

$scope.dt = new Date().getTime(); 
+1

To działa naprawić problem z wyświetlaniem, ale zmieni on twój powiązany model w znak znacznika int, a nie obiekt Date. Nie byłoby tak źle, jeśli kliknięcie daty w okienku wyskakującym nie przywróci jej z powrotem do obiektu Date, co oznacza, że ​​kod, który go używa, musi najpierw wykonać uciążliwe sprawdzanie typu. – Fasermaler

3

miałem podobny problem, wygląda jak bootstrap UI jest niezgodna z wersją angularjs 1.3.x

Ten plunkr rozwiązuje problem dla mnie http://plnkr.co/edit/L9u12BeeBgPC2z0nlrLZ?p=preview

// this is the important bit: 
.directive('datepickerPopup', function(){ 
    return { 
    restrict: 'EAC', 
    require: 'ngModel', 
    link: function(scope, element, attr, controller) { 
     //remove the default formatter from the input directive to prevent conflict 
     controller.$formatters.shift(); 
    } 
    } 
}); 

odnoszą się także do biletu GitHub https://github.com/angular-ui/bootstrap/issues/2659#issuecomment-60750976

+0

To nie działa dla mnie z kątowym 1.3.15 –

+0

Pracowałem idealnie w porządku dla mnie !! Dzięki, to jest kwestia biblioteki angularjs..mine to 1.3, po prostu wstrzyknij ją do swoich dyrektyw i powinieneś być dobry! – Manam

4

Gdzie/gdziekolwiek znalazłem rozwiązania są długotrwałe, obsługi dyrektywą itd. Więc wolę ten krótki jeden

birthday = $filter('date')(new Date(), "MMM dd, yyyy"); 

Uwaga: Nie zapomnij, aby wstrzyknąć kątowe wybudowany w $ filter serwisu do sterownika

angular.module('app').controller("yourController", 
['$filter' function($filter){ 
     /* your code here */ 

     birthday = $filter('date')(new Date(), "MMM dd, yyyy"); 

     /* your code here */ 
}]); 

Mam nadzieję, że to pomoże.

+0

To niestety zamienia powiązaną właściwość na ciąg znaków, a nie na datę, a po wybraniu innej daty zostanie ona przywrócona do daty, tak jak rozwiązanie Andreasa Ågrena oznacza, że ​​należy wykonać pewne sprawdzanie typu przed przesłaniem – csharpsql

+0

Aby poprawić to, należy dodać zegarek do pola daty, którego używasz, doda oddzielną odpowiedź. – csharpsql

1

By poprawić odpowiedzi Premchandra Singha, używając kątową $ serwis filtr działa, ale trzeba też dodać zegarek na datę dziedzinie zastosować filtr na przyszłych aktualizacji:

$scope.myDate = $filter('date')(new Date(), 'dd.MM.yy'); 
$scope.$watch('myDate', function (newValue, oldValue) { 
    $scope.myDate = $filter('date')(newValue, 'dd.MM.yy'); 
});