当用户点击GO按钮时,我需要在数组中推送值并存储在cookie中。
如果值大于10,我需要删除阵列中第一个添加的项目和更新的cookie,显示在前端。
但是我尝试了多种方式,有时候我没有得到价值,但代码并没有始终有效。
请在下面找到代码
var cookieName = 'orderList';
$scope.orderList = $cookies.getObject(cookieName) || [];
$scope.saveCookie = function (val) {
if ($scope.orderList.length >= 10) {
$scope.orderList.shift();
}
$scope.orderList.push({productName: val});
$scope.orderList = $cookies.putObject(cookieName,$scope.orderList);
}
注意:我正在使用angular 1.5和cookie 1.5版本。我收到了控制台错误。
答案 0 :(得分:1)
你没有意识到一件事。只有在第二次单击该按钮时才会出现该错误。 您收到此错误的原因是代码中的最后一行 -
$scope.orderList = $cookies.putObject(cookieName,$scope.orderList);
用 -
替换它时 console.log(typeof $cookies.putObject(cookieName,$scope.orderList));
您将在控制台中获得undefined
。这就是问题所在。当函数第二次运行时,它正在评估length
undefined
,因此错误。
只需将该行替换为$cookies.putObject(cookieName,$scope.orderList)
,因为您的$scope.orderList
已经等于推出新值的数组。
修改强> 更新代码
var cookieName = 'orderList';
$scope.saveCookie = function (val) {
$scope.orderList = $cookies.getObject(cookieName) || [];
if ($scope.orderList.length >= 10) {
$scope.orderList.shift();
}
$scope.orderList.push({productName: val});
$cookies.putObject(cookieName,$scope.orderList);
}
我在函数中引入了$scope.orderList
的定义,因为如果它的值丢失,它将在每次单击按钮时重新评估。在所有情况下都不重要。您可能会将其保留在功能之外,具体取决于您的应用程序流程。