Как добавить новое значение в существующий файл cookie в angularjs? - PullRequest
0 голосов
/ 13 февраля 2019

Я использую angulajs, по нажатию кнопки я устанавливаю cookie, и он работает нормально, но как только страница обновляется, затем после нажатия кнопки новое хранилище значений в массиве, но старое значение cookie станет пустым, как сохранить староеЗначение cookie и плюс должны добавить новое значение.как я могу это сделать?

в контроллере -

 $scope.populateTimeZone = function (world_timezones) {
    var objTimeZoneDetails = new TimeZoneDetails(
       moment.tz(world_timezones.trim()).format('LTS'),
       moment.tz(world_timezones.trim()).format('LL'),
       moment.tz.zone(world_timezones.trim()).abbr(moment.utc().valueOf()),
       moment.tz.zone(world_timezones.trim()).name);

    //push values to array
    $scope.LstTimeZoneDetails.push(objTimeZoneDetails);

    $scope.selectedTimeZones = $scope.LstTimeZoneDetails;
    $cookies.putObject('selectedTimeZones', $scope.LstTimeZoneDetails);
};

if ($cookies.getObject('selectedTimeZones') === '' || $cookies.getObject('selectedTimeZones') === undefined)
    $cookies.putObject('selectedTimeZones', $scope.LstTimeZoneDetails);

$scope.selectedTimeZones = $cookies.getObject('selectedTimeZones') || {};

в HTML -

<div class="form-inline">
                            <div class="form-group">
                                <select class="form-control" data-ng-model="selectedTimeZone">
                                    <option data-ng-repeat-start="(key, value) in timeZoneData.countries" data-ng-bind="value.name" data-ng-disabled="true" style="font-weight: bold;"></option>
                                    <option data-ng-repeat-end="" data-ng-repeat="tz in value.timezones" data-ng-bind="' - ' + tz" data-ng-value="tz"></option>
                                </select>
                            </div>
                            <div class="form-group">
                                <input id="btnAddTimeZone" type="button" value="Add Time Zone" class="btn btn-default" data-ng-click="populateTimeZone(selectedTimeZone)" />
                            </div>
                        </div>

1 Ответ

0 голосов
/ 13 февраля 2019

Мне нужно было бы увидеть больше вашего кода, чтобы быть уверенным, но из того, что вы показываете, я не вижу, куда вы загружаете данные cookie в LstTimeZoneDetails.Из того, что я понял, это то, что происходит:

Первая загрузка: LstTimeZoneDetails, вероятно, пустой массив (потому что .push() не жалуется) Проверьте, существует ли значение cookie, установите пустой массив (LstTimeZoneDetails) selectedTimeZones становится пустым массивом, или пустым объектом ({}), если LstTimeZoneDetails еще не является массивом ... Вы вероятно хотите, чтобы это был массив, но опять же я не знаю, как выглядит остальная часть вашего кода.

Нажмите кнопку: добавьте что-то в массив LstTimeZoneDetails, установитеselectedTimeZones до LstTimeZoneDetails (почему вам нужны две разные вещи, указывающие на один и тот же объект в области видимости, мне не подходит, но хорошо ...) Замените cookie на selectedTimeZones

Обновить страницу: Cookie isn 't пусто, установите selectedTimeZones в значение cookie.На этом этапе LstTimeZoneDetails - это то же самое, что и в «Первой загрузке» выше.Предполагалось, что это пустой массив, поэтому это пустой массив.

Нажмите кнопку: добавьте что-то в массив LstTimeZoneDetails, установите selectedTimeZones в LstTimeZoneDetails (зачем вам два разныхвещи, указывающие на один и тот же объект в области видимости, мне недоступны, но все в порядке ...) Замените cookie на selectedTimeZones

........

Вы видите проблемуеще?

Вы никогда не заполняете LstTimeZoneDetails старыми значениями и заменяете переменную, которую вы сделали , заполняете старыми значениями новыми значениями!

Итак, еще раз я спрашиваю - почему существуют разные переменные, которые из того, что я могу сказать, просто отражают друг друга?

Чтобы исправить, либо просто используйте одну, либо (насколько я могу судить) заменить $scope.selectedTimeZones = $cookies.getObject('selectedTimeZones') || {};с $scope.LstTimeZoneDetails = $cookies.getObject('selectedTimeZones') || []; проблема, однако, в том, что теперь LstTimeZoneDetails не будет установлен, так что в любом случае вам нужно немного переосмыслить свой подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...