我正在使用angulajs,在按钮上单击我正在设置cookie,它工作正常,但是一旦页面刷新,然后在按钮后单击数组中的新值存储,但是旧的cookie值将变为空,如何保留旧的Cookie值和plus必须添加新值。我该怎么做?
在控制器中
$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>
答案 0 :(得分:1)
我肯定需要查看更多代码,但是从显示的内容来看,我看不到将cookie数据加载到LstTimeZoneDetails
的位置。据我所知,这是正在发生的事情:
首次加载:
LstTimeZoneDetails
可能是一个空数组(因为.push()
不会抱怨)
检查cookie值是否存在,并将其设置为空数组(LstTimeZoneDetails
)
selectedTimeZones
成为该空数组,如果{}
尚未成为数组,则成为或一个空的 object (LstTimeZoneDetails
) ...您可能希望它是一个数组,但是我不知道其余代码的样子。
点击按钮:
将某些内容附加到LstTimeZoneDetails
数组,将selectedTimeZones
设置为LstTimeZoneDetails
(为什么需要两个不同的东西指向作用域上的同一对象超出了我的范围,但是可以...)
将Cookie替换为selectedTimeZones
刷新页面:
Cookie不为空,请将selectedTimeZones
设置为Cookie值。
此时,LstTimeZoneDetails
与上面的“首次加载”中的“无论如何”相同。假设它是一个空数组,所以它是一个空数组。
点击按钮:
将某些内容附加到LstTimeZoneDetails
数组,将selectedTimeZones
设置为LstTimeZoneDetails
(为什么需要两个不同的东西指向作用域上的同一对象超出了我的范围,但是可以...)
将Cookie替换为selectedTimeZones
........
您看到问题了吗?
您永远不会用旧值填充LstTimeZoneDetails
,而是用新值用旧值替换您 did 填充的变量!
所以我再次问-为什么我可以简单地彼此镜像地看到不同的变量?
要解决此问题,请只使用一个,或者(据我所知)
将$scope.selectedTimeZones = $cookies.getObject('selectedTimeZones') || {};
替换为$scope.LstTimeZoneDetails = $cookies.getObject('selectedTimeZones') || [];
但是,这样做的问题是,现在LstTimeZoneDetails
不会被设置,因此无论哪种方式,您都需要重新思考一下自己的方法。