在 Angular JS 中可能像静态一样的数组

array like static possible in angular js?

本文关键字:一样 数组 静态 JS Angular      更新时间:2023-09-26

我需要声明一个数组

而且我需要保留添加到其中的每个项目都应该永远保留在那里,即使页面被重新加载,这可能吗? var arr=[]; arr.push('id');

像这样,但存储的项目不应该被替换。

回到绘图板,这就是网络的工作方式:)

如果你重新加载页面,所有的东西都会丢失,所有的JS代码,所有的JS变量值,等等,Web在设计上是无状态的。

有一些方法可以实现这一点:要么存储在服务器中并在每个页面请求中重新加载它,要么基于浏览器的技术,因为它们更高级,因此需要更多的知识。

关于基于浏览器的(客户端)技术:我能想到的一种方法是将您的数据存储在 cookie 中。你可以在这里阅读它。Cookie 保存在您的浏览器中,并在您的浏览会话中保持活动状态。尽管如此,这是一种非常脆弱的方法:人们可以轻松删除它们,甚至将它们全部阻止。

更好的方法是HTML5本地存储API。尝试在这里或这里阅读或谷歌它。人们仍然可以删除它,它实际上只附加到您的个人浏览器(更换计算机?您丢失了它,它在本地保存)

无论如何,您必须三思而后行,并真正尝试了解服务器+客户端的工作原理以及保存内容的位置。如果这些数据非常重要,则应将其保存在服务器上,这是确保其安全和保存的唯一方法。

每个角度应用程序都有一个根范围。所有其他作用域都是根作用域的后代作用域。

所以一种选择是像这样做

angular.module('test', []).run(function($rootScope)
{        
    $rootScope.myArray = [];
    $rootScope.myArray.push("test value");
});

但是,话虽如此,不建议使用$rootScope,因此您可以在角度中使用值提供程序。

app.value("testArray", {
    someArray : []
});

然后将其注入控制器

app.controller("myController", function ($scope, testArray) {
    $scope.someValue = testArray.someArray;
});

您可以在 AngularJS 中使用 cookie 来维护这些值。仅供参考,在此处输入链接描述 JSFiddle 使用$cookieStore、两个控制器、一个$rootScope和 AngularjS 1.0.6。它在 JSFiddle 上就像 https://jsfiddle.net/h2fs0han/的基础一样,如果你弄乱了这个......

有关更多信息,请参阅 - 如何在 AngularJS 中访问 cookie?

<div ng-app="myApp">
  <div id="lastVal" ng-controller="ShowerCtrl">{{lastVal}}</div>
  <div id="button-holder" ng-controller="CookieCtrl">
    <input type="text" ng-model="strText" />
    <button ng-click="AddItem()">Add Item!</button>
  </div>
</div>
 var myApp = angular.module('myApp', ['ngCookies']);
 myApp.controller('CookieCtrl', function($scope, $rootScope, $cookieStore) {
  $scope.strText = "";
  $scope.AddItem = function() {
    var lastVal = $cookieStore.get('lastValue');
    if ($scope.strText) {
      if (!lastVal) {
        $rootScope.lastVal = new Array(); //Default
        $rootScope.lastVal.push($scope.strText);
      } else {
        var newItem = angular.copy(lastVal);
        newItem.push($scope.strText);
        $rootScope.lastVal = newItem;
      }
      $cookieStore.put('lastValue', $rootScope.lastVal);
    }
  };
});
myApp.controller('ShowerCtrl', function() {});