AngularJS待办事项列表应用程序-在页面刷新时保持列表[重复]

Posted

技术标签:

【中文标题】AngularJS待办事项列表应用程序-在页面刷新时保持列表[重复]【英文标题】:AngularJS To-Do List App - Keep list on page refresh [duplicate] 【发布时间】:2019-01-12 15:21:05 【问题描述】:

我正在使用 AngularJS 制作一个简单的待办事项列表应用程序。我实际上使用的是 ASP.NET MVC 模板,但到目前为止,我已经设法通过使用 Angular 和 Bootstrap 来让一切正常工作。

我可以添加和删除任务,并将它们标记为完成。但是,当我刷新页面时,它会重置待办事项列表。刷新页面或导航到网站上的另一个页面时,我需要它来保存列表。该列表应仅在用户关闭浏览器后重置。

我尝试了各种方法,包括 $cookies、$sessionStorage 和 $localStorage,但由于某种原因,我无法让它们中的任何一个工作。在这个阶段,我应该依赖前端进行会话管理还是后端?

下面是我尝试实现 $localStorage 时的代码示例。我错过了什么吗?

<!DOCTYPE html>
<html ng-app="todoApp">
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
</head>
<body>
<div ng-controller="todoList" class="jumbotron">
    <h2><strong>To-Do List</strong></h2>
    <br/>
    <form ng-submit="addTodo()">
        <input type="text" ng-model="todoText"
               placeholder="Add new task" size="30">
        <button type="submit" class="btn btn-primary glyphicon glyphicon-plus">Add</button>
    </form>
    <br/>
    <ul>
        <li ng-repeat="todo in todos">
            <label class="checkbox">
                <input type="checkbox" ng-model="todo.done">
                <span class="done-todo.done">todo.text</span>
                <span class="glyphicon glyphicon-trash" ng-click="removeTodo()"></span>
            </label>
        </li>
    </ul>
</div>

<script>
    var app = angular.module('todoApp', []);
   
    app.controller('todoList', function ($scope, $localStorage) 
        
        $scope.getTodos = function() 
            var str = $localStorage.getItem("todos");
            $scope.todos = JSON.parse(str);
            
            if (!todos) 
                $scope.todos = [ text: 'Feed the cat', done: true ,  text: 'Mow the lawn', done: false ];
            
        

        $scope.saveToDos = function() 
            var str = JSON.stringify(todos);
            $localStorage.SetItem("todos", str);
             
           
        $scope.addTodo = function () 
            if($scope.todoText !== '') 
                $scope.todos.push(text:$scope.todoText, done:false);
                $scope.todoText = '';
                saveToDos();
            
        ;

        $scope.removeToDo = function() 
            todos.splice($index, 1);
            saveToDos();
        
    );

</script>
</body>
</html>

【问题讨论】:

尝试使用 setItem()(小写 s) $localStorage 不是核心 AngularJS 服务。显示该服务的代码。 这段代码sn-p有很多错误。它以找不到$localStorageProvider 开头。然后todos 未定义。然后SetItem 没有这样的属性。名单还在继续。这段代码 sn -p 对读者没什么用处。 【参考方案1】:

$localStorage 不是 Angular 服务,它是一个内置的浏览器功能。

你应该这样使用它:

var jsonObject = key: 'value';
window.localStorage.setItem("varName", JSON.stringify(jsonObject)); // this will save "varName" in the local storage with jsonObject as value
jsonObject = JSON.parse(window.localStorage.getItem("varName")); // this will read "varName" from localStorage to jsonObject

【讨论】:

【参考方案2】:

tod​​olist 保存 todo 的 $scope 会在导航到不同的路线时被销毁。 简单的解决方案是使用 $rootScope 来保存所有待办事项 - 这将在导航到应用程序上的不同路线时保留待办事项的数据。

您仍然可以在 onbeforeunload 事件中使用 localsotrage 并清除 localstorage。 Reference

【讨论】:

以上是关于AngularJS待办事项列表应用程序-在页面刷新时保持列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将日期保存到本地存储

刷新反应组件或通量/减少中的逻辑?

jQuery模仿ToDoList实现简单的待办事项列表

点击回车刷新页面jQuery

反应类组件。待办事项应用程序。如何使用 localStorage 存储数据

NSDocument 用于关系数据/待办事项列表?