Vue에서 컴포넌트 데이터의 반응형 편집

이제 우리 자식 컴포넌트 데이터 편집을 구현해 보겠습니다. 먼저 부모 컴포넌트에서 사용자 id에 따른 변경 메서드를 만듭니다:

App.vuemethods: {
  change(id, name, surn) {
    this.users = this.users.map((user) => {
      if (user.id === id) {
        user.name = name;
        user.surn = surn;
      }
      return user;
    });
  }
}

루프 안에서 컴포넌트를 생성하고, 이름, 성, id 및 변경 메서드를 파라미터로 전달합니다:

App.vue<template>
  <User
    v-for   ="user in users"
    
    :id     ="user.id"
    :name   ="user.name"
    :surn   ="user.surn"
    :key    ="user.id"
    @change="change"
  />
</template>

자식 컴포넌트 설정의 emits에 이벤트 방출을 정의합니다:

components/User.vueprops: {
  id:     Number,
  name:   String,
  surn:   String,
},
emits: ['change'],

이제 자식 컴포넌트에서 컴포넌트 모드, 표시 또는 편집을 설정하는 속성을 만듭니다:

components/User.vuedata() {
  return {
    isEdit: false,
  }
}

편집을 위한 입력 필드 작동을 지원하는 속성도 만듭니다:

components/User.vuedata() {
  return {
    isEdit: false,
    newName: '',
    newSurn: '',
  }
}

이 속성들의 초기값이 프롭스에서 가져오도록 만듭니다:

components/User.vuedata() {
  return {
    isEdit: false,
    newName: this.name,
    newSurn: this.surn,
  }
}

편집 모드를 시작하는 메서드를 만듭니다:

components/User.vuemethods: {
  edit() {
    this.isEdit = true;
  }
}

편집된 데이터를 저장하고 편집 모드를 비활성화하는 메서드를 만듭니다:

components/User.vuemethods: {
  save() {
    this.isEdit = false;
    this.$emit('change', this.id, this.newName, this.newSurn);
  }
}

자식 컴포넌트의 템플릿을 만듭니다:

components/User.vue<template>
  <template v-if="!isEdit">
    {{ name }}
    {{ surn }}
    <button @click="edit">
      edit
    </button>
  </template>
  <template v-else>
    <input v-model="newName">
    <input v-model="newSurn">
    <button @click="save">
      save
    </button>
  </template>
</template>
Задание 1

Employee 컴포넌트 데이터 편집을 구현하세요.