Сохранить состояние локальной области видимости ng-change в Datepicker - PullRequest
0 голосов
/ 18 мая 2018

Я столкнулся с тем, что кажется очень простой проблемой, но я не могу понять, как это исправить. Я отправил этот вопрос изначально, но, похоже, проблема в сфере.

Так что в основном это то, что происходит:

  • У меня есть указатель даты внутри формы. Когда пользователь выбирает дату, ng-change сработает и вызовет функцию setDate(date).
  • В режиме отладки я подтвердил, что выбранные данные действительно передаются в функцию.
  • Внутри функции переменной $ scope.simStartDate назначено это значение, и я вижу, как ее значение изменяется.
  • Однако, когда я позже отправлюсь для отправки формы, $scope.simStartDate возвращается с первоначальным инициализированным значением.
  • Я поставил точку останова при инициализации $scope.simStartDate = new Date(), но она не срабатывает. Это означает, что переменная не инициализируется снова.
  • Я пытался использовать переменную $ scope в ng-модели, но проблема все та же.

Это заставляет меня думать, что ng-change создает локальную область и обновляет локальную переменную, к которой я не могу получить доступ позже. Правильно ли мое понимание? Если нет, как я могу это исправить?

Это мой HTML:

<div class="row" ng-controller="DashboardParamsFormCtrl">
    <div class="col-sm-6">
        <div class="form-group">
            <label for="inputFirstName">Simulation start date</label>
            <p class="input-group">
                <input type="text" class="form-control"
                       uib-datepicker-popup="{{format}}"
                       datepicker-options="options"
                       ng-model="date"
                       ng-change="setDate(date)"
                       is-open="opened" ng-required="true"
                       close-text="Close"
                       alt-input-formats="altInputFormats"
                       show-button-bar="true" />
                <span class="input-group-btn">
                    <button type="button" class="btn btn-default"
                            ng-click="open()">
                        <i class="glyphicon glyphicon-calendar"></i>
                   </button>
               </span>
            </p>
        </div>
    </div>

Это JS:

    angular.module('BlurAdmin.pages.dashboard')
        .controller('DashboardParamsFormCtrl', DashboardParamsFormCtrl);

    /** @ngInject */
    function DashboardParamsFormCtrl(baConfig, layoutPaths, baUtil, $scope)
    {
       $scope.ParamsFormBtnClicked = function()
       {
           console.log("Date: " + $scope.simStartDate);
       }

        $scope.open = open;

        $scope.opened = false;
        $scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate'];
        $scope.format = $scope.formats[0];
        $scope.options = {
            showWeeks: false
        };
        function open() {

            $scope.opened = true;
        }

        $scope.simStartDate = new Date();
        $scope.date = new Date();

        $scope.setDate = function(startDate)
        {
            $scope.simStartDate = startDate;
        }

    }
})();

Спасибо.

1 Ответ

0 голосов
/ 19 мая 2018

ваша новая дата прохождения ();без значения он получит текущую дату.вы должны передать значение ng-model в новую дату ();

вот так.

$scope.simStartDate = new Date(date);
$scope.date = new Date(date); 

надеюсь, эта ссылка тоже вам поможет plnkr

...