首页 > 解决方案 > 使用 AngularJS 编辑用户 LocalStorage

问题描述

我正在创建一个网页,我可以在其中使用 AngularJS 上的 localStorage 执行 CRUD 功能。到目前为止,我能够添加、删除用户并将它们保存到 localStorage。

但我无法将编辑后的用户详细信息保存在 localStorage 中。“ $scope.selectUser = function (user) ”是我用来编辑用户的函数。编辑用户有效,但他们在网页刷新时被删除。这意味着已编辑用户的数据没有被存储。找人指导我。提前致谢

var myApp = angular.module("myApp", []);


myApp.controller("myController", function ($scope) {
    console.log("in controller...");
    $scope.newUser = {};
    $scope.info = "";

    if (localStorage.getItem("users") === null) {
        $scope.users = [
            { email: "John@yahoo.com", firstName: "John", lastName: "Doe", contact: "281-283-2480", role: "Supplier-Admin", company: "Apple" },
            { email: "Rick@yahoo.com", firstName: "Rick", lastName: "Fraiser", contact: "987-283-2489", role: "Supplier-User", company: "Apple" },
            { email: "Sam@yahoo.com", firstName: "Sam", lastName: "Tarly", contact: "456-786-2480", role: "BuyerAdmin", company: "Samsung" }
        ];
        localStorage.setItem("users", JSON.stringify($scope.users));
    } else {
        $scope.users = JSON.parse(localStorage.getItem("users"));
    }


    $scope.saveUser = function () { 
        console.log("Saving...");
        $scope.users.push($scope.newUser);
        $scope.info = "New User Added Successfully!";
        $scope.newUser = {};
        localStorage.setItem("users", JSON.stringify($scope.users));
        //localStorage.setItem("email", $scope.users);
    };

    $scope.selectUser = function (user) {
        $scope.clickedUser = user;
        localStorage.setItem("users", JSON.stringify($scope.users));
    };
    $scope.editUser = function () {
        console.log($scope.users.indexOf($scope.clickedUser));
        // $scope.users.push($scope.editUser);
        $scope.users.push($scope.users.indexOf($scope.clickedUser), 1);
        localStorage.setItem("users", JSON.stringify($scope.users));
        $scope.info = "User Edited Successfully!";
     }
    $scope.deleteUser = function () {
        console.log($scope.users.indexOf($scope.clickedUser));
        $scope.users.splice($scope.users.indexOf($scope.clickedUser), 1);
        localStorage.setItem("users", JSON.stringify($scope.users));
        $scope.info = "User Deleted Successfully!";
        
    };        

    $scope.clearInfo = function () {
        $scope.info = "";
    };
});
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>User Management- M&M</title>
    <link rel="icon" href="images/logo.jpg">
    <link href="css/bootstrap.min.css" rel="stylesheet" />
    <script type="text/javascript" src="js/angular.min.js"></script>
    <script type="text/javascript" src="js/app.js"></script>

    <!--<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">-->
    <!--<link href="CSS/Home.css" rel="stylesheet" />-->
</head>
<body ng-app="myApp" ng-controller="myController">
    <nav class="navbar navbar-expand-lg navbar-light" id="mainNav">
        <div class="container">
            <a class="navbar-brand js-scroll-trigger" href="index.html">
                <img src="images/logo.jpg" alt="M&M" width="110" />
            </a>
            <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarResponsive">
                <ul class="navbar-nav ml-auto">
                    <li class="nav-item">
                        <a class="nav-link js-scroll-trigger" href="LoginPage.html">Login</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link active js-scroll-trigger" href="User_Mgmt.html">User Management</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link js-scroll-trigger" href="CompanyManagement.html">Company Management</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link js-scroll-trigger" href="ProductPage.html">Product Management</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link js-scroll-trigger" href="ShoppingCart_Group5_Team1.html">Shopping Cart</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
    <header class="subhead">
        <div class="container">
            <div class="row">
                <div class="col-xs-6 col-md-6">
                    <input class="form-control" id="ex3" type="text" placeholder="Search Users" ng-model="searchUsers">
                </div>
                <div class="col-xs-6 col-md-6">
                    <button type="button" class="btn btn-info btn-lg float-right" data-toggle="modal" data-target="#myModal">Add New</button>
                </div>
                <div class="clearfix"></div>
            </div>

            <hr>


            <table class="table table-striped table-hover">
                <thead>
                    <tr class="table100-head">
                        <th>Email</th>
                        <th>First Name</th>
                        <th>Last Name</th>
                        <th>Contact</th>
                        <th>Role</th>
                        <th>Company</th>
                        <th>Edit</th>
                        <th>Delete</th>
                    </tr>
                </thead>
                <tbody>
                    <tr ng-repeat="user in users | filter: searchUsers track by $index">
                        <td>{{user.email}}</td>
                        <td>{{user.firstName}}</td>
                        <td>{{user.lastName}}</td>
                        <td>{{user.contact}}</td>
                        <td>{{user.role}}</td>
                        <td>{{user.company}}</td>
                        <td>
                            <button type="button" class="btn btn-info" data-toggle="modal" data-target="#myModalEdit" ng-click="selectUser(user)">Edit</button>
                        </td>
                        <td>
                            <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#myModalDelete" ng-click="selectUser(user)">Delete</button>
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>

        <!-- Pop Up-ADD NEW USER Modal -->
        <div class="modal fade" id="myModal" role="dialog">
            <div class="modal-dialog">

                <!-- Modal content-->
                <div class="modal-content">
                    <div class="modal-header">
                        <h4 class="modal-title">New User Registration</h4>
                        <button type="button" class="close" data-dismiss="modal">&times;</button>
                    </div>
                    <div class="modal-body">
                        <form class="form-horizontal" action="/action_page.php">

                            <div class="form-group">
                                <label class="control-label col-sm-2">Email</label>
                                <div class="col-sm-10">
                                    <input type="email" class="form-control" placeholder="Enter Email" ng-model="newUser.email">
                                </div>
                            </div>

                            <div class="form-group">
                                <label class="control-label col-sm-2">First Name</label>
                                <div class="col-sm-10">
                                    <input type="text" class="form-control" placeholder="Enter First Name" ng-model="newUser.firstName">
                                </div>
                            </div>

                            <div class="form-group">
                                <label class="control-label col-sm-2">Last Name</label>
                                <div class="col-sm-10">
                                    <input type="text" class="form-control" placeholder="Enter Last Name" ng-model="newUser.lastName">
                                </div>
                            </div>

                            <div class="form-group">
                                <label class="control-label col-sm-2">Contact</label>
                                <div class="col-sm-10">
                                    <input type="tel" class="form-control" placeholder="Enter Contact" ng-model="newUser.contact">
                                </div>
                            </div>

                            <div class="form-group">
                                <label class="control-label col-sm-2">Role</label>
                                <div class="col-sm-10">
                                    <input type="text" class="form-control" placeholder="Enter Role" ng-model="newUser.role">
                                </div>
                            </div>

                            <div class="form-group">
                                <label class="control-label col-sm-2">Company</label>
                                <div class="col-sm-10">
                                    <select class="form-control" placeholder="Select Company" ng-model="newUser.company">
                                        <option value="Apple">Apple</option>
                                        <option value="Samsung">Samsung</option>
                                        <option value="Sony">Sony</option>
                                        <option value="LG">LG</option>
                                        <option value="OnePlus">OnePlus</option>
                                    </select>
                                </div>
                            </div>

                            <div class="form-group">
                                <div class="col-sm-offset-2 col-sm-10">
                                    <button type="submit" class="btn btn-default" ng-click="saveUser()" data-dismiss="modal">Submit</button>
                                </div>
                            </div>
                        </form>
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                    </div>
                </div>

            </div>
        </div>

        <!-- Pop Up-EDIT USER Modal -->
        <div class="modal fade" id="myModalEdit" role="dialog">
            <div class="modal-dialog">

                <!-- Modal content-->
                <div class="modal-content">
                    <div class="modal-header">
                        <h4 class="modal-title">Edit User</h4>
                        <button type="button" class="close" data-dismiss="modal">&times;</button>
                    </div>
                    <div class="modal-body">
                        <form class="form-horizontal" action="/action_page.php">

                            <div class="form-group">
                                <label class="control-label col-sm-2">Email</label>
                                <div class="col-sm-10">
                                    <input type="email" class="form-control" placeholder="Enter Email" ng-model="clickedUser.email">
                                </div>
                            </div>

                            <div class="form-group">
                                <label class="control-label col-sm-2">First Name</label>
                                <div class="col-sm-10">
                                    <input type="text" class="form-control" placeholder="Enter First Name" ng-model="clickedUser.firstName">
                                </div>
                            </div>

                            <div class="form-group">
                                <label class="control-label col-sm-2">Last Name</label>
                                <div class="col-sm-10">
                                    <input type="text" class="form-control" placeholder="Enter Last Name" ng-model="clickedUser.lastName">
                                </div>
                            </div>

                            <div class="form-group">
                                <label class="control-label col-sm-2">Contact</label>
                                <div class="col-sm-10">
                                    <input type="tel" class="form-control" placeholder="Enter Contact" ng-model="clickedUser.contact">
                                </div>
                            </div>

                            <div class="form-group">
                                <label class="control-label col-sm-2">Role</label>
                                <div class="col-sm-10">
                                    <input type="text" class="form-control" placeholder="Enter Role" ng-model="clickedUser.role">
                                </div>
                            </div>

                            <div class="form-group">
                                <label class="control-label col-sm-2">Company</label>
                                <div class="col-sm-10">
                                    <select class="form-control" placeholder="Select Company" ng-model="clickedUser.company">
                                        <option value="Apple">Apple</option>
                                        <option value="Samsung">Samsung</option>
                                        <option value="Sony">Sony</option>
                                        <option value="LG">LG</option>
                                        <option value="OnePlus">OnePlus</option>
                                    </select>
                                </div>
                            </div>

                            <div class="form-group">
                                <div class="col-sm-offset-2 col-sm-10">
                                    <button type="submit" class="btn btn-default" data-dismiss="modal" ng-click="editUser()">Submit</button>
                                </div>
                            </div>
                        </form>
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                    </div>
                </div>

            </div>
        </div>

        <!-- Pop Up-DELETE USER Modal -->
        <div class="modal fade" id="myModalDelete" role="dialog">
            <div class="modal-dialog">

                <!-- Modal content-->
                <div class="modal-content">
                    <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal">&times;</button>
                        <h5 class="modal-title">Are You Sure?</h5>
                    </div>
                    <div class="modal-body">
                        <h5 style="color: red">You are going to delete the user "{{clickedUser.firstName}}"</h5>
                        <br />
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-default" data-dismiss="modal" ng-click="deleteUser()">Yes</button>
                        <button type="button" class="btn btn-default" data-dismiss="modal">No</button>
                    </div>
                </div>

            </div>
        </div>
    </header>

    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="js/bootstrap.min.js"></script>
</body>
</html>

标签: javascripthtmlangularjs

解决方案


controller.js对文件进行了以下更改

提供id给每个用户对象,以便他们可以有效地跟踪,而无需检查对象的引用。

 function parseData(input) {
        return input.reduce(function (o, i) {
            o.push(Object.assign({"id":Date.now()},i));
            return o;
        },[]);
    }

var initialData = [
            { email: "John@yahoo.com", firstName: "John", lastName: "Doe", contact: "281-283-2480", role: "Supplier-Admin", company: "Apple" },
            { email: "Rick@yahoo.com", firstName: "Rick", lastName: "Fraiser", contact: "987-283-2489", role: "Supplier-User", company: "Apple" },
            { email: "Sam@yahoo.com", firstName: "Sam", lastName: "Tarly", contact: "456-786-2480", role: "BuyerAdmin", company: "Samsung" }
        ];
        $scope.users = parseData(initialData);

选择用户时创建一个新对象而不是设置现有对象的引用

$scope.clickedUser = Object.assign({},user);

虽然编辑用户迭代users对象并更新编辑的用户而不是设置参考

$scope.editUser = function () {
        $scope.users = $scope.users.reduce(function (o,user) {
           if(user.id === $scope.clickedUser.id){
               user = Object.assign(user,$scope.clickedUser);
           }
           o.push(user);
           return o;
        },[]);
        $scope.clickedUser = {};
        console.log("Users detail => ",$scope.users);
        localStorage.setItem("users", JSON.stringify($scope.users));
        $scope.info = "User Edited Successfully!";
    };

删除用户方法

 $scope.deleteUser = function () {
        $scope.users = $scope.users.reduce(function (o,user) {
            if(user.id !== $scope.clickedUser.id){
                o.push(user);
            }
            return o;
        },[]);
        $scope.clickedUser = {};
        console.log("Users detail => ",$scope.users);
        localStorage.setItem("users", JSON.stringify($scope.users));
        $scope.info = "User Deleted Successfully!";
    };

controller.js文件的完整代码

var myApp = angular.module("myApp", []);
myApp.controller("myController", function ($scope) {
    console.log("in controller...");
    $scope.newUser = {};
    $scope.clickedUser = {};
    $scope.info = "";

    function parseData(input) {
        return input.reduce(function (o, i) {
            o.push(Object.assign({"id":Date.now()},i));
            return o;
        },[]);
    }

    if (localStorage.getItem("users") === null) {
        var initialData = [
            { email: "John@yahoo.com", firstName: "John", lastName: "Doe", contact: "281-283-2480", role: "Supplier-Admin", company: "Apple" },
            { email: "Rick@yahoo.com", firstName: "Rick", lastName: "Fraiser", contact: "987-283-2489", role: "Supplier-User", company: "Apple" },
            { email: "Sam@yahoo.com", firstName: "Sam", lastName: "Tarly", contact: "456-786-2480", role: "BuyerAdmin", company: "Samsung" }
        ];
        $scope.users = parseData(initialData);
        localStorage.setItem("users", JSON.stringify($scope.users));
    } else {
        $scope.users = JSON.parse(localStorage.getItem("users"));
    }


    $scope.saveUser = function () {
        console.log("Saving...");
        $scope.users.push(Object.assign({"id":Date.now()},$scope.newUser));
        $scope.info = "New User Added Successfully!";
        $scope.newUser = {};
        localStorage.setItem("users", JSON.stringify($scope.users));
    };

    $scope.selectUser = function (user) {
        $scope.clickedUser = Object.assign({},user);
    };

    $scope.editUser = function () {
        $scope.users = $scope.users.reduce(function (o,user) {
           if(user.id === $scope.clickedUser.id){
               user = Object.assign(user,$scope.clickedUser);
           }
           o.push(user);
           return o;
        },[]);
        $scope.clickedUser = {};
        console.log("Users detail => ",$scope.users);
        localStorage.setItem("users", JSON.stringify($scope.users));
        $scope.info = "User Edited Successfully!";
    };

    $scope.deleteUser = function () {
        $scope.users = $scope.users.reduce(function (o,user) {
            if(user.id !== $scope.clickedUser.id){
                o.push(user);
            }
            return o;
        },[]);
        $scope.clickedUser = {};
        console.log("Users detail => ",$scope.users);
        localStorage.setItem("users", JSON.stringify($scope.users));
        $scope.info = "User Deleted Successfully!";
    };

    $scope.clearInfo = function () {
        $scope.info = "";
    };
});

推荐阅读