如何使用Angular 1.5版

时间:2017-02-05 07:03:29

标签: javascript jquery angularjs cookies setcookie

当用户点击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版本。我收到了控制台错误。

http://plnkr.co/edit/K17uJv72U2ytG6JHZBtn?p=preview

1 个答案:

答案 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的定义,因为如果它的值丢失,它将在每次单击按钮时重新评估。在所有情况下都不重要。您可能会将其保留在功能之外,具体取决于您的应用程序流程。