ค้นหาเว็บไซต์

json - การเพิ่มข้อมูลผู้ใช้ลงใน local storage ใช้ได้เพียงครั้งเดียว หลังจากนั้นวัตถุที่เพิ่มจะถูกเขียนทับอย่างง่ายๆ? (Angular 10+)


ฉันมีแบบฟอร์มที่รับข้อมูลผู้ใช้ ฉันพยายามเขียนข้อมูลผู้ใช้ที่ป้อนลงในพื้นที่เก็บข้อมูลภายในเครื่องของฉัน การส่งครั้งแรกจะเพิ่มระเบียนตามที่คาดไว้ แต่เมื่อพยายามเพิ่มระเบียนที่สอง คุณสมบัติของระเบียนแรกจะถูกเขียนทับ - โปรดทราบว่าจะมีการเพิ่มองค์ประกอบในอาร์เรย์ แต่ค่าของมันเป็นเพียงรหัสขององค์ประกอบก่อนหน้าเท่านั้น

สิ่งนี้สามารถเห็นได้ด้านล่าง:

หลังจากเพิ่มผู้ใช้คนแรก (จอห์น) การจัดเก็บข้อมูลในเครื่องของฉันเป็นดังนี้:

หลังจากเพิ่มผู้ใช้คนที่สองของฉัน (Alice) ตอนนี้พื้นที่จัดเก็บข้อมูลในเครื่องของฉันคือ:

ฉันกำลังใช้ส่วนต่อประสาน, ผู้ใช้:

export interface User {
  id : number;
  firstName : string;
  secondName : string;
  title : string;
  email : string;
  userRole : string;
  password : string;
}

โค้ดสำหรับการเพิ่มลงในที่เก็บข้อมูลภายในเครื่องคือ:

user = {} as User;

onSubmit() {
    console.log(this.addUserForm.value);
    this.user = Object.assign(this.user, this.addUserForm.value);
    this.addUser(this.user);
  }

  addUser(user: any) {
    var users = [];
    if (localStorage.getItem('Users')) {
      users = JSON.parse(localStorage.getItem('Users') || '{}');
      users = [user, ...Object.keys(users)]
    }
    else {
      users = [user]
    }
    localStorage.setItem('Users', JSON.stringify(users));
  }

มีเหตุผลอะไรบ้างว่าทำไมสิ่งนี้ถึงเกิดขึ้น?

คำตอบ #1

...Object.keys(users) จะกระจายเฉพาะคีย์ของอาร์เรย์ของคุณ ซึ่งคือ 0, 1.. ไปยังอาร์เรย์นั้น

คุณควรแค่เพิ่ม user ใหม่เข้าไปในอาร์เรย์แบบนี้:

users.push(user); // or users.unshift(user); if you want it to be the first element

หรือถ้าคุณต้องการใช้ไวยากรณ์ spread:

users = [user, ...users]

แทนที่จะ

users = [user, ...Object.keys(users)]