Переменная области не обновляется в $ scope. $ Watch

0

Я наблюдаю за переменной $ scope, которая устанавливает функцию для изменения переменной $ scope в начале недели выбранной даты. Функция возвращает правильную дату, но когда я пытаюсь установить переменную $ scope в эту дату, представление не обновляется. Но проверяя его внутри инспектора, переменная $ scope изменяется, но представление никогда не обновляется. Вот функция $ watch:

angular.module('hansenApp', ['ngAnimate', 'ui.bootstrap']);
angular.module('hansenApp').controller('DatepickerCtrl', function ($scope) {
    $scope.startDate = new Date();
    $scope.endDate = new Date();

    $scope.status = {
        startOpened: false,
        endOpened: false,
    };

    $scope.openStart = function ($event) {
        $scope.status.startOpened = true;
    };

    $scope.openEnd = function ($event) {
        $scope.status.endOpened = true;
    };

    $scope.$watch('startDate', function (dateVal) {
        var oldDate = new Date(dateVal);
        var tempDate = getStartDateOfWeek(dateVal);

        if (oldDate.getTime() != tempDate.getTime()) {
            $scope.startDate = tempDate;
        }
    });

    $scope.$watch('endDate', function (dateVal) {
        var oldDate = new Date(dateVal);
        var tempDate = getEndDateOfWeek(dateVal);

        if ($scope.endDate.getTime() != tempDate.getTime()) {
            $scope.endDate = tempDate;
        }
    });

    function getStartDateOfWeek(date) {
        var ISOweekStart = date;
        ISOweekStart.setDate(date.getDate() - date.getDay());
        return ISOweekStart;
    }

    function getEndDateOfWeek(date) {
        var ISOweekEnd = date;
        ISOweekEnd.setDate(date.getDate() + (6 - date.getDay()));
        return ISOweekEnd;
    }
});

Изменить 1: Здесь вид:

<p class="input-group">
    <input type="text" id="endDate" class="form-control" uib-datepicker-popup="MM/dd/yyyy" ng-model="endDate" is-open="status.endOpened" close-text="Close" placeholder="End Date:" runat="server" />
    <span class="input-group-btn">
        <button type="button" class="btn btn-default" ng-click="openEnd($event)"><i class="glyphicon glyphicon-calendar"></i></button>
    </span>
</p>
  • 0
    Можете ли вы обновить свой вопрос, чтобы отразить проблему более конкретно сейчас, так как вы вставили код?
  • 1
    Вы должны получить ошибку infdig на вашей консоли. Вы не должны $ смотреть переменную, которую вы также изменяете внутри $ watch, используйте другое имя
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

Вы не меняете ссылку на дату, а только ее значение.

Дата - это объект в javascript, поэтому, если вы не измените ссылку (замените ее новым объектом Date()), детектор угловых изменений не будет запускаться снова. Таким образом, вам придется заменить startDate на совершенно новый экземпляр даты javascript с заданными свойствами.

Поэтому замените

var ISOweekEnd = date;

от

var ISOweekEnd = new Date();
  • 0
    Большой! Работает! Большое спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню