반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- App.vue
- jsx
- ES6
- TypeScript
- input
- storybook
- MySQL
- 리액트
- event
- Vue transition
- State
- HOC
- 자바스크립트
- webpack
- vuex
- 댓글달기
- JavaScript
- Wecode
- 자료구조
- scss
- react
- nodejs
- Vue
- express
- Vue.js
- sass
- 쉬운설명
- CSS
- mapGetters
- v-html
Archives
- Today
- Total
익명의 개발노트
[vue.js] vuedraggable.js로 드래그 구현하기 본문
반응형
프로젝트에 기존에 드래그 앤 드랍 때문에 dragula 라이브러리를 도입했지만, json 데이터 정렬과, vue plugin 제한으로
새로운 라이브러리를 찾는 도중 vue-draggable 라이브러리를 찾았다.
해당 라이브러리는 wrapper 로 감싸서 사용하는 방식이며. 굉장히 간단하다.
1. 설치
npm install vuedraggable
2. 적용
import draggable from 'vuedraggable';
export default {
name: 'list',
components:{
draggable
},
<...중략>
}
<draggable :list="stageInfoList">
<transition-group name="list-complete">
<div v-for="(item, index) in this.$props.themeListData" :key="item" class="drag-item">
<stage-info></stage-info>
</div>
</transition-group>
</draggable>
실제 보여줄 드래그해서 움직일 데이터 바인딩을 :list를 통해서 바인딩시켜주며, 트랜지션 효과를 먹이고 싶으면
<transition-group>을 적용하며, 필요없으면 생략하면 된다.
실제 보여줄 리스트를 draggable 컴포넌트로 감싸는게 핵심.
반드시 데이터 뿌려주는 곳의 key값는 중복되지 않아야한다..
위 코드의 :key="item" 부분을 아래와 같이 하면
:key = "item+index"
작동을 안한다. 반드시 키값은 고유한값으로 해주어야 한다.
그렇치 않을 경우 아래 스테이지를 드래그해서 위치 옮기면, 키값으로 설정해 놓은 부분이 같을 경우
해당 내용까지 전부 변해버리는 불상사가 일어난다.
키값을 따로 주기위해 데이터 구조를 아래와 같이 변경함.
//기존
{
title: "육",
content: "",
type: "",
stageNo: 1,
}
//변경
{
index: "3-1",
title: "육",
content: "",
type: "",
stageNo: 1,
}
:key="item.index"
객체별로 고유 키값을 설정한 후 key 값을 주면 이상없이 작동한다.
반응형
'코딩일기 > TIL' 카테고리의 다른 글
[vue.js] mapGetters 관한 꿀팁 (0) | 2020.04.29 |
---|---|
[vue.js] How to preview multiple images before upload? (0) | 2020.04.22 |
[vue.js] storybook absolute path 설정 (0) | 2020.03.23 |
[vue.js] typescript + storybook 설정하기 (0) | 2020.03.20 |
[typescript] vuex-module화 된 내용 getters 하는법 (0) | 2020.03.19 |
Comments