Подтвердить что ты не робот

Angular -ui datepicker начальное состояние datepicker, не отформатированное за всплывающее окно datepicker

Я работаю с angular -ui datepicker, и все работает нормально, за исключением начального состояния datepicker. AFTER Я выбираю дату, это выглядит хорошо. См. Ниже:

Начальное состояние

enter image description here

После выбора даты в подборщике

enter image description here

Итак, ясно, что я получаю стробированную версию объекта даты в первом случае и отформатирован после выбора даты.

Разметка

<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>

Контроллер

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
};

Не огромная сделка, но было бы очень приятно, если бы модель (которая должна быть объектом даты в документах) была отформатирована для $scope.format для начала, а не для объекта с сокращенной датой. Кроме того, не уверен, что это имеет значение, но этот datepicker находится внутри модального. Спасибо за любую помощь!

UPDATE

Похоже, я не единственный, кто это пережил, и это связано с использованием angular 1.3. https://github.com/angular-ui/bootstrap/issues/2659

4b9b3361

Ответ 1

Где/где когда-либо были найдены решения, они длительны, управляются по директиве и т.д. Поэтому я предпочитаю этот короткий

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

Примечание. Не забудьте ввести angular встроенную службу $filter в контроллер

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

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

       /* your code here */ 
}]);

Надеюсь, что это поможет.

Ответ 2

У меня была аналогичная проблема, похоже, что пользовательский интерфейс bootstrap несовместим с версией AngularJS 1.3.x

Этот plunkr решает проблему для меня 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();
    }
  }
});

Также см. билет Github https://github.com/angular-ui/bootstrap/issues/2659#issuecomment-60750976

Ответ 3

Чтобы улучшить ответ Premchandra Singh, использование службы фильтра angular $действительно работает, но вам нужно также добавить часы в поле даты, чтобы применить фильтр к будущим обновлениям:

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

Ответ 4

Другая работа, которая работала для меня, помимо той, которая описана в проблеме github, заключается в том, чтобы инициализировать модель с периодом времени в миллисекундах, а не с объектом даты, например:

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