"Angularjs最佳实践——数据存储"
"Angularjs最佳实践——数据存储"
我的 Angular 应用有两个控制器。我的问题是,当用户从页面导航离开时,控制器不会保留数据。
我该如何将其中一个控制器中选择的数据存储到数据存储区域中,以便在其他控制器之间使用?
admin 更改状态以发布 2023年5月23日
编辑 请参阅Jossef Harush的答案,他写了一个深入的回答,涵盖了其他方法,包括这个。
我建议使用localStorage或sessionStorage - http://www.w3schools.com/html/html5_webstorage.asp。
HTML本地存储提供了两个对象来在客户端上存储数据:
- window.localStorage - 无到期日期的存储数据
- window.sessionStorage - 存储一个会话的数据(当浏览器选项卡关闭时数据会丢失)
这假设您不想将数据POST / PUT到您的Web服务(在您的问题中提到的Windows服务)。
如果您的数据是一些数组或类似的数据结构,则可以将其转换为JSON格式存储为字符串,然后在需要时将其解析回来,如下所示- 如何在localStorage中存储数组?
var names = []; names[0] = prompt("New member name?"); localStorage["names"] = JSON.stringify(names); //... var storedNames = JSON.parse(localStorage["names"]);
选项1 - 自定义service
您可以使用专用的Angular服务,在控制器之间存储和共享数据(服务是单实例对象)
服务定义
app.service('commonService', function ($http) { var info; return { getInfo: getInfo, setInfo: setInfo }; // ................. function getInfo() { return info; } function setInfo(value) { info = value; } });
在多个控制器中使用
app.controller("HomeController", function ($scope, commonService) { $scope.setInfo = function(value){ commonService.setInfo(value); }; }); app.controller("MyController", function ($scope, commonService) { $scope.info = commonService.getInfo(); });
选项2 - html5localStorage
您可以使用内置浏览器本地存储,并从任何地方存储数据
写入
$window.localStorage['my-data'] = 'hello world';
阅读
var data = $window.localStorage['my-data'] // ...
选项3 - 通过Web服务器API
如果您需要在不同用户之间保留数据,则应该将其保存在服务器端(db / cache)中的某个位置
function getProfile() { return $http.get(commonService.baseApi + '/api/profile/'); } function updateProfile(data) { var json = angular.toJson(data); return $http.post(commonService.baseApi + '/api/profile/', json); }