Bootstrap-ui datepicker: как иметь пустую ng-модель?

В угловом проекте у меня есть средство выбора даты bootstrap-ui, которое используется для предоставления информации о дате оплаты счета.

Первоначально при создании счета, так как он не был оплачен, поэтому у меня должна быть переменная ng-model, указывающая null или что-то в этом роде:

$scope.invoice.Payment_Date = null

Дело в том, что для работы средства выбора даты требуется действительный объект даты. При использовании всего таким образом, когда я выбираю дату в средстве выбора даты, чтобы сказать, что мой счет был оплачен, средство выбора даты указывает правильную дату, например, вторник, 15 февраля 2016 года, но переменная ng-model остается нулевой.

Если я инициализирую переменную как таковую:

$scope.invoice.Payment_Date = new Date();

то при смене даты datepicker ng-модель обновляется как надо.

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

Есть ли способ оставить эту переменную равной нулю или пустой, когда средство выбора даты остается нетронутым, но при этом получает правильное значение средства выбора даты при его использовании?

Надеюсь, кто-то может помочь!

Изменить: вот HTML-код средства выбора даты:

<form name="formFacture" novalidate rc-submit="modifierFacture()">  
<div class="form-group">
    <label>Date de paiement : </label>
        <p class="input-group">
            <input type="text" class="form-control" uib-datepicker-popup="dd MMMM yyyy" ng-model="facture.Date_Paiement" is-open="popupDatePaiement.opened" datepicker-options="dateOptions" date-disabled="disabled(date, mode)" close-text="Fermer" clear-text="Effacer" current-text="Aujourd'hui" readonly="readonly" ng-click="openDatePaiement()" />
            <span class="input-group-btn">
                <button type="button" class="btn btn-default" ng-click="openDatePaiement()"><i class="glyphicon glyphicon-calendar"></i></button>
            </span>
        </p>
    </div>
<div class="container text-center">
    <button type="submit" class="btn btn-primary">Enregistrer</button>
    <div class="btn btn-primary" ng-click="ChangeLocation('prev', '/#factures')">Retour</div>
</div>

</form>

Вот JS-код:

$scope.facture = {};
$scope.dateOptions = {
   startingDay: 1
 };
$scope.popupDatePaiement = {
   opened: false
};
var openDatePaiement = $scope.openDatePaiement = function() {
   $scope.popupDatePaiement.opened = true;
};

$scope.modifierFacture = function(){
   console.log($scope.facture);
   return
}

После просмотра кода я обнаружил, что:

  1. Я могу получить действительную дату с помощью средства выбора даты (была небольшая ошибка с ng-моделью), но если я дважды изменю дату, переменная facture.Date_Paiement останется с 1-м выбором, 2-й вариант не будет перенаправлен на него.
  2. Если я использую кнопку «очистить» внутри средства выбора даты, переменная facture.Date_Paiement не возвращается к нулю
  3. Я попытался добавить эту строку:

    $scope.Date_Paiement = ноль

внутри функции openDatePaiement, но в этом случае facture.Date_Paiement все время остается нулевым.


person BlackPage    schedule 01.02.2016    source источник
comment
Я использовал datepicker со свойством области, для которого мы установили значение null, чтобы очистить дату без проблем. Я предполагаю, что ваша проблема где-то в другом месте (например, с областью действия средства выбора даты). Можете ли вы опубликовать html, где вы используете средство выбора даты?   -  person Anthony Patton    schedule 01.02.2016
comment
Извините, я пытался сделать plunkr, но не смог заставить его работать :(   -  person BlackPage    schedule 01.02.2016
comment
Обновил код, как вы просили, спасибо за вашу помощь!   -  person BlackPage    schedule 01.02.2016


Ответы (1)


Хорошо, после нескольких часов, потраченных на изучение причин этого вопроса, я нашел ответ.

НЕ полагайтесь на console.log(object), чтобы сообщить вам, что находится внутри объекта, поскольку кажется, что функция, анализирующая объект для его рендеринга внутри консоли, содержит ошибки!

Вместо этого используйте console.log(JSON.stringify(object)) и вы получите правильные значения.

У меня до сих пор голова болит, что делать, когда такие вещи глючат???

person BlackPage    schedule 02.02.2016
comment
Ах. Это также вызвало у меня несколько головокружительных моментов. Это не совсем ошибка. Хорошее описание здесь для дальнейшего использования. stackoverflow.com/a/23392650/5682569 - person Anthony Patton; 05.02.2016