Vue : v-for 목록에서 항목을 제거하면 캔버스 항목이 남습니다.

zachThePerson

이것은 제목에서 표현하기 어렵지만 일부 설정으로 설명하기는 매우 쉽습니다.

구성 요소 목록이 있습니다. 목록의 각 구성 요소는 다음과 같습니다.

| [Canvas Preview] Name      (Delete button) |

각 구성 요소에는 항목의 미리보기를 표시하는 데 사용되는 작은 캔버스 요소, 이름 및 목록에서 제거하기위한 삭제 버튼이 있습니다. v-for가 반복하는 목록은 Vuex에 저장됩니다.

문자를 사용하여 다양한 미리보기 이미지를 나타내는 목록은 다음과 같습니다.

| [W] Item 1      (Delete button) |
| [X] Item 2      (Delete button) |
| [Y] Item 3      (Delete button) |
| [Z] Item 4      (Delete button) |

삭제 버튼을 누르면 해당 항목이 목록에서 분리되고 목록이 업데이트됩니다. 이름이 업데이트되고 클릭하면 올바른 항목이 선택됩니다. 문제는 미리보기가 같은 위치에 있다는 것입니다. 예를 들어 위 목록에서 항목 2 (미리보기 X 포함)를 삭제 한 경우 다음 목록이 표시됩니다.

| [W] Item 1      (Delete button) |
| [X] Item 3      (Delete button) |
| [Y] Item 4      (Delete button) |

미리보기는 WXY이며 X가 삭제되었으므로 WYZ 여야합니다. 기본적으로 캔버스는 동일한 순서로 유지되며 항목이 삭제 된 위치에 관계없이 마지막에 하나만 삭제됩니다.

항목이 삭제되면 모든 캔버스를 다시 그리는 몇 가지 해키 방법을 생각할 수 있지만 더 나은 해결책이 있는지 궁금합니다.

편집 : 항목을 삭제하는 코드는 다음과 같습니다.

항목의 삭제 버튼이 목록 구성 요소에 이벤트를 내 보냅니다.

<button @click="deleteAsset">Delete</button>

deleteAsset(event){
    event.stopPropagation();
    this.isRenaming = false;
    this.$emit('deleteAsset', this.asset);
},

래퍼는 Vuex 작업을 전달했습니다.

deleteAsset(asset){
    this.$store.dispatch('GameData/deleteAsset', {category: asset.category_ID, id: asset.ID});
    this.updateAsset();
},

Vuex 동작 및 변형

//Action
deleteAsset({commit}, {category, id}){
    commit('deleteAsset', {category, id})
}

//Mutation
deleteAsset: (state, {category, id}) => {
    let curList = getList();
    let hasFound = false;

    for (let i = 0; !hasFound && i < curList.length; i++){
        if (curList[i].ID == id){
            curList.splice(i, 1);
            hasFound = true;
        }
    }
}

다음은 문제의 스크린 샷입니다. Vue 문제의 스크린 샷

클릭시 현재 ID와 데이터를 인쇄하고 모든 것이 올바르게 인쇄되는 빠른 테스트 기능을 추가했기 때문에 나머지 데이터는 정확합니다. 변경되지 않는 것은 캔버스 요소 일뿐입니다.

편집 2 : vue 코드

//List
<Asset
    ref="assets"
    v-for="asset in selectedList"
    :key="asset.cat_ID"
    :asset="asset"
    :defaultIcon="selected_category.icon"
    @deleteAsset="deleteAsset"
    @selectAsset="selectAsset"/>

//Asset code
<template>
    <div ref="asset" class="asset" :class="{selected : isSelected}" @click="selectAsset">
        <div class="leftFloat">
            <canvas v-show="hasThumb" class="thumbnail" ref="thumbNail" width="20" height="20">Test</canvas>
            <img v-if="!hasThumb" class="thumbnail assetIcon" :src="require(`@/${defaultIcon}.svg`)" />
            <div v-if="isRenaming">
                <input ref="renameText" v-model="asset.name" type="text" />
            </div>
            <div v-else>{{asset.name}}</div>
        </div>
        <div class="rightFloat">
            <button class="rightButton" @click="deleteAsset">
                <img class="rightIcon" src="@/assets/trash.svg" />
            </button>
        </div>
    </div>
</template>

cat_ID둘 이상의 자산에 할당 될 수 있다고 가정하면 자산에서 반복되는 key경우 Vue가 목록 변경을 감지 할 수 없으므로 이를 사용하는 데 문제가 발생 cat_ID합니다 selectedList.

자산에 ID속성이 있으므로이를 사용하여key

<Asset
  ref="assets"
  v-for="asset in selectedList"
  :key="asset.ID"
  :asset="asset"
  :defaultIcon="selected_category.icon"
  @deleteAsset="deleteAsset"
  @selectAsset="selectAsset"/>

보다 key

key특별한 속성은 주로 때 v- 노드를 식별하기 위해 뷰의 가상 DOM 알고리즘에 대한 힌트로 사용되는 기존의 목록에 대해 노드의 새 목록을 diffing의 . 키가 없으면 Vue는 요소 이동을 최소화하는 알고리즘을 사용하고 동일한 유형의 요소를 가능한 한 많이 패치 / 재사용하려고합니다. 키를 사용하면 키의 순서 변경에 따라 요소를 재정렬하고 더 이상 존재하지 않는 키가있는 요소는 항상 제거 / 파괴됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Vue.js : 새 항목을 추가 한 후 목록에서 항목을 제거하면 버그가 발생했습니다.

분류에서Dev

목록에서 항목을 제거하면 목록의 나머지 항목이 엉망이됩니다.

분류에서Dev

다른 목록의 항목을 비교하여 목록에서 항목 제거

분류에서Dev

목록에서 항목을 제거하면 동일한 클래스의 다른 목록이 반영됩니다. 왜?

분류에서Dev

연결 목록에서 인덱스 항목을 제거 하시겠습니까?

분류에서Dev

목록보기에서 다중 선택을 종료하면 목록 항목 패딩이 제거됩니다.

분류에서Dev

항목이 발생하는 인덱스 목록이 주어지면 목록에서 항목 제거-Haskell

분류에서Dev

목록에서 항목을 제거하는 데 어려움이 있습니다.

분류에서Dev

연결 목록에서 항목을 제거해도 ListBox에서 항목이 제거되지 않습니다.

분류에서Dev

쉘 스크립트의 목록에서 항목을 제거하려면 어떻게해야합니까?

분류에서Dev

Python에서 캔버스에서 항목을 이동하기 위해 버튼을 어떻게 사용합니까?

분류에서Dev

'음성'이 아닌 목록에서 항목을 제거 하시겠습니까?

분류에서Dev

연결된 목록에서 중복 항목을 삭제하려고하는데 중복 항목이 여전히 남아 있습니다.

분류에서Dev

목록에없는 항목을 푸시하고 싶습니다. 항목이 이미 목록에있는 경우 해당 항목을 제거하십시오.

분류에서Dev

목록에 추가 된 항목은 Vue.js 버전 2에서 반응하지 않습니다.

분류에서Dev

Vue-DOM 항목 목록에서 항목의 자식을 전환하는 방법은 무엇입니까?

분류에서Dev

스크롤시 목록보기에 500 개의 이미지를 추가하고 현재 화면에없는 항목을 제거하고 싶습니다.

분류에서Dev

목록에 항목이 있는지 테스트하고 항목 또는 색인을 반환합니다.

분류에서Dev

복사 된 목록에서 항목을 제거하면 원본에서도 제거됩니다.

분류에서Dev

드롭 다운 목록에서 항목을 선택하고 목록에서 항목을 값으로 제거한 다음 합계를 업데이트합니다.

분류에서Dev

ListView에서 삭제 버튼을 구현했지만 작동하지만 항목을 클릭하면 거기에서 제거되는 방법이 있습니다.

분류에서Dev

[삭제] JSON 사전에서 항목을 삭제하면 빈 사전 (`{}`)이 남습니다. 완전히 제거하려면 어떻게합니까?

분류에서Dev

목록 상자에서 두 개 이상의 항목을 제거하려면 어떻게해야합니까?

분류에서Dev

Vue JS에서 v-model을 사용하여 새 항목을 추가 할 수 없습니다.

분류에서Dev

데이터 목록에서 항목을 두 번 이상 추가 / 제거하는 데 문제가 있습니다.

분류에서Dev

LitElement는 목록에서 항목을 제거합니다.

분류에서Dev

새 항목에 동시에 액세스하면서 이전 ArrayList 항목을 제거하는 방법

분류에서Dev

목록 상자에서 항목을 선택하면 해당 항목에서 포커스를 제거하는 사전 렌더링 이벤트가 발생합니다.

분류에서Dev

조건에서 다른 항목을 제거하도록 스크립트 수정

Related 관련 기사

  1. 1

    Vue.js : 새 항목을 추가 한 후 목록에서 항목을 제거하면 버그가 발생했습니다.

  2. 2

    목록에서 항목을 제거하면 목록의 나머지 항목이 엉망이됩니다.

  3. 3

    다른 목록의 항목을 비교하여 목록에서 항목 제거

  4. 4

    목록에서 항목을 제거하면 동일한 클래스의 다른 목록이 반영됩니다. 왜?

  5. 5

    연결 목록에서 인덱스 항목을 제거 하시겠습니까?

  6. 6

    목록보기에서 다중 선택을 종료하면 목록 항목 패딩이 제거됩니다.

  7. 7

    항목이 발생하는 인덱스 목록이 주어지면 목록에서 항목 제거-Haskell

  8. 8

    목록에서 항목을 제거하는 데 어려움이 있습니다.

  9. 9

    연결 목록에서 항목을 제거해도 ListBox에서 항목이 제거되지 않습니다.

  10. 10

    쉘 스크립트의 목록에서 항목을 제거하려면 어떻게해야합니까?

  11. 11

    Python에서 캔버스에서 항목을 이동하기 위해 버튼을 어떻게 사용합니까?

  12. 12

    '음성'이 아닌 목록에서 항목을 제거 하시겠습니까?

  13. 13

    연결된 목록에서 중복 항목을 삭제하려고하는데 중복 항목이 여전히 남아 있습니다.

  14. 14

    목록에없는 항목을 푸시하고 싶습니다. 항목이 이미 목록에있는 경우 해당 항목을 제거하십시오.

  15. 15

    목록에 추가 된 항목은 Vue.js 버전 2에서 반응하지 않습니다.

  16. 16

    Vue-DOM 항목 목록에서 항목의 자식을 전환하는 방법은 무엇입니까?

  17. 17

    스크롤시 목록보기에 500 개의 이미지를 추가하고 현재 화면에없는 항목을 제거하고 싶습니다.

  18. 18

    목록에 항목이 있는지 테스트하고 항목 또는 색인을 반환합니다.

  19. 19

    복사 된 목록에서 항목을 제거하면 원본에서도 제거됩니다.

  20. 20

    드롭 다운 목록에서 항목을 선택하고 목록에서 항목을 값으로 제거한 다음 합계를 업데이트합니다.

  21. 21

    ListView에서 삭제 버튼을 구현했지만 작동하지만 항목을 클릭하면 거기에서 제거되는 방법이 있습니다.

  22. 22

    [삭제] JSON 사전에서 항목을 삭제하면 빈 사전 (`{}`)이 남습니다. 완전히 제거하려면 어떻게합니까?

  23. 23

    목록 상자에서 두 개 이상의 항목을 제거하려면 어떻게해야합니까?

  24. 24

    Vue JS에서 v-model을 사용하여 새 항목을 추가 할 수 없습니다.

  25. 25

    데이터 목록에서 항목을 두 번 이상 추가 / 제거하는 데 문제가 있습니다.

  26. 26

    LitElement는 목록에서 항목을 제거합니다.

  27. 27

    새 항목에 동시에 액세스하면서 이전 ArrayList 항목을 제거하는 방법

  28. 28

    목록 상자에서 항목을 선택하면 해당 항목에서 포커스를 제거하는 사전 렌더링 이벤트가 발생합니다.

  29. 29

    조건에서 다른 항목을 제거하도록 스크립트 수정

뜨겁다태그

보관