H'academy
  • H'academy
  • Web
    • Back-end
      • Spring Framework
        • Spring 개발환경 구축
          • Project 생성
          • Maven 설정
          • Maven 저장소 위치 설정
          • Apache Tomcat 연동
          • Lombok 설정
        • Spring MVC Project
          • pom.xml
          • web.xml
          • root-context.xml
          • servlet-context.xml
          • DispatcherServlet
        • Controller
          • File Upload / Download
          • RestController(작성중)
        • Spring Test
          • Assert 단정문
          • Spring 환경 연동 테스트
          • MockMvc Test
        • Spring AOP
          • AOP 용어
          • Pointcut Expression
          • Filter
          • Interceptor
          • Filter vs Interceptor
          • Controller Advice(작성중)
        • Spring JDBC
          • DBCP
          • myBatis
            • ResultMap 활용
        • ETC
          • Logging
            • Tomcat Logging 설정
          • Property 관리
          • E-mail
            • Gmail 변경사항
          • Scheduler
          • Websocket
      • Spring Boot
        • STS 다운로드
        • 프로젝트 생성
        • 프로젝트 구조
        • Spring Devtools
        • Spring Controller
          • JSP 연동
            • * JSP 생성불가 문제
            • Spring Boot 3.x
          • Model
          • 요청 파라미터 처리
          • 경로 변수 처리
          • 요청 메소드
          • Redirect
          • Spring Actuator
        • Spring Boot JDBC
          • Database 정보
          • DAO Pattern
          • ORM Framework
            • myBatis
              • Mapper 생성
            • Spring Data JPA
        • Spring AOP
          • AspectJ
          • Filter
          • Interceptor
          • ControllerAdvice
        • REST API
        • Spring WebSocket
        • Send Mail
        • Logging
        • Spring Boot Test
        • Lombok
      • Java EE
        • 개발환경 구성
          • Server와 Client
          • Web Server와 WAS
        • Dynamic Web Project
      • Apache Tomcat
        • Apache Tomcat 구조
        • Tomcat User 생성
        • Tomcat Manager 설정
      • Maven
      • Jenkins
        • Installation
          • Github Webhook 설정
          • Maven 연동
        • Project setting
          • 소스 코드 관리 설정
          • 빌드 유발 설정
          • 빌드 작업 설정
      • OpenAPI(swagger)
        • swagger 2.x (legacy)
        • swagger 3.x (boot)
        • Swagger UI 꾸미기
        • SpringDoc
    • Front-end
      • HTML
        • Heading
        • <A>
        • <IMG>
        • <DIV>
        • <TABLE>
        • <FORM>
          • <INPUT>
          • <SELECT>
          • <TEXTAREA>
          • <FIELDSET>
        • List
      • CSS
        • CSS 적용 방식
          • 크기(size)
            • 픽셀(px)
          • 색상(color)
        • CSS 선택자
          • 스타일 우선순위
        • CSS 주요 속성
          • 크기 속성
            • border
            • margin
            • padding
            • box-sizing
          • 배경 속성
          • 글자 속성
            • font
            • text
          • 배치 속성
            • position
            • display
            • overflow
            • float
            • flexbox
        • CSS Reset
      • JS
        • syntax
          • let, const
          • 구조 분해 할당
          • spread operator
          • Object copy
          • this
          • module
        • jQuery
          • structure
          • function
          • ajax
            • ajax file upload
        • VueJS
          • CDN(Vue3)
            • 기본 구조
            • Vue Devtools
            • jQuery vs VueJS
            • Vue instance
              • data
                • IME issue
              • v-model
              • template
              • computed
              • watch
                • deep watch
                • vs Computed
              • methods
            • Vue directive
              • v-text
              • v-html
              • v-bind
                • v-bind style
                • v-bind class
              • v-on
                • once
                • prevent
              • v-show
              • v-if
              • v-for
          • Vue-cli 3
            • 프로젝트 구조
            • src
              • main.js
              • App.vue
              • HelloWorld.vue
            • Vue Router 4
              • History mode
              • 404 not found
              • Guard
                • beforeEach
            • Vuex
              • 이동 횟수 측정
            • axios
              • interceptor
          • Vue-electron
        • ReactJS
          • CDN(React18)
            • 템플릿 설명
            • JSX
            • render
            • Handling Events
              • onClick
              • onInput
            • Component
              • 클래스 컴포넌트
                • state
                • props
                • event
                  • Mouse
                  • Input
                • lifecycle
              • 함수형 컴포넌트
                • useState
                • useEffect
                • useReducer
                • useMemo
                • props
                • 조건부 렌더링
          • CRA
            • 자원 경로 설정
            • src 절대 경로 설정
            • react-router
            • Context API
            • Electron 설정
        • Webpack
          • NodeJS
          • Git
    • Ubuntu server
      • Jenkins
    • 테스트 도구
      • JMeter
        • Test Plan
        • Test Plan(with login)
        • Plugin 설치
    • WebRTC
  • Base Language
    • Java
      • Java 실행 과정
        • 개발 환경 구축
        • 샘플 코드 작성
        • 컴파일/실행
        • 환경 변수 설정
      • Java 초급
        • Hello world
        • 자료와 정보
        • 변수
          • 정수
            • 정수의 저장 원리
            • 정수형 변수 생성
          • 실수
            • 실수의 저장 원리
            • 실수형 변수 생성
          • 논리
            • 논리형 변수 생성
          • 문자
          • 문자열
            • 문자열 변수 생성
          • 사용자 정의 자료형
        • 연산자
          • 대입 연산
          • 부호 연산
          • 산술 연산
          • 복합 대입 연산
          • 증감 연산
          • 쉬프트 연산
          • 비트 연산
          • 비교 연산
          • 논리 연산
          • 삼항 연산
          • 변환 연산
        • 표준 입출력
          • 표준 출력
          • 표준 오류 출력
          • 표준 입력
            • Scanner 입력
        • 제어문
          • if 구문
            • 단일 조건
            • 두 가지의 조건
            • 여러 가지의 조건
          • switch~case 구문
          • while 구문
          • do~while 구문
          • for 구문
        • 랜덤(Random)
        • 배열
          • 1차원 배열
          • 2차원 배열
          • 다차원 배열
          • Sort
            • 선택 정렬
            • 버블 정렬
            • 삽입 정렬
      • Java 중급
        • 객체 지향 프로그래밍
        • 클래스
        • 인스턴스
        • 필드
        • 메소드
          • 설정(setter) 메소드
          • 반환(getter) 메소드
        • 생성자
        • 접근 제한
          • private
          • package
          • protected
          • public
        • 정적(static)
        • 불변(final)
        • 상수(constant)
        • 상속
          • this와 super의 이해
          • 멤버 변수 설정
          • 멤버 메소드 설정
          • 생성자 설정
        • 추상화
          • 추상 클래스
          • 인터페이스
        • 다형성
        • 중첩 클래스
          • 일반 중첩 클래스
          • static 중첩 클래스
          • 지역 중첩 클래스
          • 익명 중첩 클래스
      • Java API(작성중)
        • java.lang
        • java.util
        • java.text
        • java.time
        • java.io
        • java.net
        • java.sql
        • java.awt
        • javax.swing
      • Java 고급
        • 제네릭(Generic)
        • 열거형(Enum)
        • Annotation Type
          • Retention
          • Target
          • Nested Annotation
        • Java Reflection
          • Intro
          • Class
          • Field
          • Constructor
          • Method
          • Package
      • JDBC
        • 드라이버 로드
        • 연결 생성
          • JDBC Driver 유형
        • JdbcTemplate
      • Java 버전별 변경사항
        • Java 1.8
          • Lambda Expression
          • Stream API
          • java.time 패키지
        • Java 9
        • Java 12
          • switch~case
        • Java 13
          • Text Block
    • Arduino
      • 학습 준비
        • Reference
        • 아두이노 온라인 시뮬레이터
        • 전기의 이해
        • 그라운드(GND)의 이해
      • 개발 환경 구축
        • CH340 보드 설치
        • Editor 글꼴 설정
      • 아두이노 제어
        • 코드의 구성
        • 시리얼 출력
        • 디지털 출력
          • LED 출력
        • PWM 출력
        • 시리얼 입력
        • 디지털 입력
          • PIR 센서
        • 아날로그 입력
          • 온도 센서(LM35DZ)
          • 조도 센서
          • 가스 센서
        • 피에조 부저
        • 서보 모터 제어
          • 시리얼 서보 모터 제어
          • 스위치 서보 모터 제어
        • 온습도 센서(DHT-11)
        • LCD
      • 아두이노 통신
        • 블루투스(Bluetooth)
          • HC-06
            • 온도 센서 활용
          • HM-10
        • 와이파이(Wi-Fi)
          • ESP-01
            • WiFiEsp 라이브러리 추가
            • WiFiEsp 네트워크 스캔
        • 이더넷(Ethernet)
        • ArduinoJson 라이브리 사용
    • Regular Expression
  • Database
    • Oracle
      • 설치
        • SQL Plus
        • SQL Developer
        • DBeaver
        • Docker(Mac OS)
      • SQL
        • 관리자 명령
          • 사용자 관리
          • 권한 관리
          • Encoding 설정
          • 서비스 포트 설정
        • 사용자 명령
          • 테이블 관리
            • 테이블 항목 제약 조건
            • 외래키 제약조건
            • 데이터 유형
          • 시퀀스 관리
          • 데이터 관리
            • 데이터 추가
            • 데이터 조회
              • 오라클 내장 함수
              • 그룹 조회
              • Top N Query
            • 데이터 수정
            • 데이터 삭제
          • 뷰 관리
          • 인덱스 관리
          • 집합 연산
          • 테이블 조인
            • 등가 조인
            • 외부 조인
        • HR 계정
        • 기타 명령
          • 컬럼 간격 조정
      • 내보내기 및 불러오기
        • EXPDP, IMPDP
        • Docker로 실행중인 경우
      • 기타
        • 자동 세션 제거
        • Tablespace 관리
        • Unlock user
  • 면접대비
    • Q&A
      • Java
      • Database
      • Web
      • IT 일반상식
  • ETC
    • Eclipse IDE
      • 설치
      • 화면 설명
      • 환경 설정
      • 프로젝트 생성
      • 소스파일 작성 및 실행
    • Github
      • Github 계정 관리
      • Github 저장소 관리
        • Profile
        • Collaborators
        • Code
        • Issues
        • Pull requests
        • Action
          • Vue 3 Deploy Action
      • Personal Access Token
      • Git ignore 설정
        • Spring 개발용 샘플
      • Github Eclipse 연동
        • Branches
        • Project
        • Team project
          • Dynamic web project
          • Spring Boot Project
          • Branch 생성
          • Pull Request
          • Branch 보호
          • Branch 다시 생성
    • Figma
      • Team
      • Design
      • Component
    • 과정평가형
      • 실기 모의고사 1회
      • 실기 모의고사 2회
      • 실기 모의고사 3회
      • 실기 모의고사 4회
    • VScode
      • Live Server 실행 오류
      • Github 계정 변경
    • Naver ToastUI Editor
      • Editor 만들기
        • Editor options
          • File upload
      • Viewer 만들기
    • 문자 인코딩 방식
    • OBS
      • 녹화 잡음 제거 설정
    • Semantic Version
Powered by GitBook
On this page
  • v-for
  • 사용 예제 : 10회 반복
  • 사용 예제 : 배열에 대한 Iteration
  • 반복 요소에 대한 분리
  • index 사용
  • 배열 내부에서의 v-model 사용
  • v-bind:key의 사용
  • 배열 변경
  • 데이터 추가
  • 데이터 삭제
  • 데이터 정렬
  • 숫자 배열 최종 코드
  • 객체 배열의 v-for
  • 객체 기능 추가
  1. Web
  2. Front-end
  3. JS
  4. VueJS
  5. CDN(Vue3)
  6. Vue directive

v-for

v-for

v-for는 VueJS에서 배열 데이터에 화면을 연동하여 반복 처리할 수 있도록 하는 지시자이다.

N회차 반복 또는 특정 저장소에 대한 Iteration이 가능하다.

사용 예제 : 10회 반복

<!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.0">
    <title>Vue for loop</title>
</head>
<body>
    <div id="app">
        <h1 v-for="n in 10">Vue for loop {{n}}</h1>
    </div>

    <script src="https://unpkg.com/vue@next"></script>
    <script>
        const app = Vue.createApp({
            data(){
                return {
                    
                };
            }
        });
        app.mount("#app");
    </script>
</body>
</html>

위 예제는 특정 태그를 원하는 횟수(10회) 만큼 반복하는 예제이다.

<h1 v-for="n in 10">Vue for loop {{n}}</h1>

태그에 v-for 지시자를 작성하고 n in 10이라고 작성하면 1부터 10까지 반복이 이루어진다. 현재 반복의 n값은 내부에서 출력이 가능하다.

사용 예제 : 배열에 대한 Iteration

<!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.0">
    <title>Vue for loop</title>
</head>
<body>
    <div id="app">
        <input type="text" v-for="data in dataList" v-model="data">
    </div>

    <script src="https://unpkg.com/vue@next"></script>
    <script>
        const app = Vue.createApp({
            data(){
                return {
                    dataList:[10, 20, 30, 40, 50],
                };
            }
        });
        app.mount("#app");
    </script>
</body>
</html>

위 예제를 실행하면 다섯 개의 입력창이 나오고 데이터가 잘 설정된다. 하지만 Vue에서 권장하는 형태의 v-for 사용법은 아니다. v-for를 사용할 때는 다음에 유의해야 한다.

반복 요소에 대한 분리

v-for를 사용한 태그에는 반복과 관련된 요소 외의 항목들을 사용하지 않아야 한다.

예제에서 문제가 되는 부분은 다음과 같다.

<input type="text" v-for="data in dataList" v-model="data">

input 태그에 v-for와 v-model이 같이 사용되고 있다. 그 외에도 v-if, v-show, v-bind 등 다양한 항목들이 v-for와 함께 사용되는 경우가 있는데 실행 순서에 따라 오작동이 발생할 수 있으므로 사용하지 않는 것이 좋다. 다음과 같이 구분되어 사용하는 것이 바람직하다.

<div v-for="data in dataList">
    <input type="text" v-model="data">
</div>

index 사용

v-for 구문 작성 시 제공되는 index를 사용할 수 있다. index는 다음과 같이 데이터 뒤에 작성하면 자동으로 할당되며 0부터 시작하여 1씩 증가한다. 배열과 관련된 다양한 처리에서 활용할 수 있다.

<div v-for="(data, index) in dataList">
    {{index}} : <input type="text" v-model="data">
</div>

배열 내부에서의 v-model 사용

<div v-for="(data, index)in dataList">
    <input type="text" v-model="data">
</div>

배열 내부에 입력창이 존재하며 배열의 요소와 v-model로 연결해야 할 경우가 발생한다면 다음을 유의해야 한다.

  • iteration된 항목인 data를 model로 사용하면 단방향 연결되어 입력창 수정 시 데이터에 반영되지 않는다.

  • index를 사용하여 원본 데이터인 dataList[i]를 model로 설정하면 양방향 연결되어 입력창 수정 시 데이터에 반영된다.

입력창을 수정할 때 원본인 dataList가 변경되게 하고 싶다면 다음과 같이 v-model을 사용해야 한다.

<div v-for="(data, index) in dataList">
    {{index}} : <input type="text" v-model="dataList[index]">
</div>

v-bind:key의 사용

Vue에서 개별 DOM 노드들을 추적하고 기존 요소들을 재사용하기 위해서는 항목들에 고유한 key를 설정해야 한다. 가급적 고유한 항목으로 설정해야 하며, 배열이나 객체로 설정하지 말아야 한다. 설정하지 않을 경우 Vue에서 제공하는 기본 성능에 의존하게 된다. v-bind:key 또는 약식 명령인 :key로 설정한다.

key로 설정할 항목이 애매하다면 제공되는 index를 key로 사용하면 된다

key가 적용될 경우 다음과 같이 변화한다.

<div v-for="(data, index) in dataList" v-bind:key="index">
    {{index}} : <input type="text" v-model="dataList[index]">
</div>

Vue cli 환경에서는 v-for에 :key가 설정되지 않을 경우 구문 에러가 발생하므로 가급적 모든 경우에 작성하도록 해야한다.

배열 변경

v-for에 연결된 데이터가 변할 경우 화면도 변한다. 따라서 배열에 데이터가 늘어나거나 줄어들게 되면 연결된 화면의 컴포넌트 개수에도 변화가 생긴다.

Vue에서는 배열의 변이 메소드를 사용하면 자동으로 모든 연결이 갱신되도록 처리한다. 다음 메소드 중에서 사용이 가능하다.

  • push()

  • pop()

  • shift()

  • unshift()

  • splice()

  • sort()

  • reverse()

데이터 추가

데이터를 추가하기 위한 추가 입력창과 추가 데이터를 구현해야 한다.

html

<input v-model="inputData">
<button v-on:click="addData">추가</button>

vue

const app = Vue.createApp({
    data(){
        return {
            inputData:"",//이 부분을 추
            dataList:[10, 20, 30, 40, 50],
        };
    },
    methods:{
        //등록 메소드
        addData(){
            if(!this.inputData) return;
            this.dataList.push(this.inputData);
            this.inputData = "";
        },
    },
});
app.mount("#app");

데이터를 작성하고 추가 버튼을 누르면 데이터가 존재한다는 가정 하에 배열에 데이터가 추가되며 입력창의 변화가 발생하는 것을 확인할 수 있다.

데이터 삭제

데이터를 삭제하려면 해당 데이터의 index가 필요하다.

index를 알고 있을 경우 다음 명령을 통해 삭제가 가능하다.

array.splice(index, range);

한 개만 지울 예정이므로 range는 1이 되어 다음과 같은 코드가 된다.

array.splice(index, 1);

html

반복 내부의 입력창 우측에 삭제 버튼을 추가한다.

<div v-for="(data, index) in dataList" v-bind:key="index">
    {{index}} : <input type="text" v-model="dataList[index]">
    <button v-on:click="removeData(index);">삭제</button>
</div>

vue

methods에 삭제 기능인 removeData를 추가한다. 등록과 다르게 index가 전달되므로 매개변수에 선언해야 한다.

const app = Vue.createApp({
    data(){
        return {
            inputData:"",
            dataList:[10, 20, 30, 40, 50],
        };
    },
    methods:{
        //등록 메소드
        addData(){
            if(!this.inputData) return;
            this.dataList.push(this.inputData);
            this.inputData = "";
        },
        //삭제 메소
        removeData(index){
            this.dataList.splice(index, 1);
        },
    },
});
app.mount("#app");

실행 후 삭제 버튼을 눌러 정상적으로 삭제되는 것을 확인할 수 있다.

데이터 정렬

데이터 정렬은 sort 메소드를 사용한다. sort 메소드 내부에 comparator를 정의하여 정렬방식을 지정할 수 있다.

html

반복 영역 하단에 정렬 버튼을 추가한다.

<button v-on:click="sortData">정렬</button>

vue

버튼을 클릭하면 실행할 정렬 메소드를 만들고 sort 명령을 호출한다.

필요한 방식에 맞게 명령을 사용하여 원하는 결과가 나올 수 있도록 한다.

const app = Vue.createApp({
    data(){
        return {
            inputData:"",
            dataList:[10, 20, 30, 40, 50],
        };
    },
    methods:{
        //등록 메소드
        addData(){
            if(!this.inputData) return;
            this.dataList.push(this.inputData);
            this.inputData = "";
        },
        //삭제 메소드
        removeData(index){
            this.dataList.splice(index, 1);
        },
        //정렬 메소드
        sortData(){
            // this.dataList.sort();//오름차순(기본)
            this.dataList.sort((a,b)=>b-a);//내림차순
        },
    },
});
app.mount("#app");

숫자 배열 최종 코드

<!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.0">
    <title>Vue for loop</title>
</head>
<body>
    <div id="app">
        <input v-model="inputData">
        <button v-on:click="addData">추가</button>

        <div v-for="(data, index) in dataList" v-bind:key="index">
            {{index}} : <input type="text" v-model="dataList[index]">
            <button v-on:click="removeData(index);">삭제</button>
        </div>

        <button v-on:click="sortData">정렬</button>
    </div>

    <script src="https://unpkg.com/vue@next"></script>
    <script>
        const app = Vue.createApp({
            data(){
                return {
                    inputData:"",
                    dataList:[10, 20, 30, 40, 50],
                };
            },
            methods:{
                //등록 메소드
                addData(){
                    if(!this.inputData) return;
                    this.dataList.push(this.inputData);
                    this.inputData = "";
                },
                //삭제 메소드
                removeData(index){
                    this.dataList.splice(index, 1);
                },
                //정렬 메소드
                sortData(){
                    // this.dataList.sort();//오름차순(기본)
                    this.dataList.sort((a,b)=>b-a);//내림차순
                },
            },
        });
        app.mount("#app");
    </script>
</body>
</html>

객체 배열의 v-for

객체 배열을 이용하여 이전 예제와 동일한 작업을 수행한 결과 코드는 다음과 같다.

동일하게 등록, 삭제, 정렬 기능이 존재한다.

<!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.0">
    <title>Vue for loop</title>
</head>
<body>
    <div id="app">
        <input type="text" v-model="inputData.name">
        <input type="number" v-model.number="inputData.score">
        <button v-on:click="addData">등록</button>
        <div v-for="(data, index) in dataList" v-bind:key="index">
            순서 : {{index}}, 
            이름 : <input type="text" v-model="data.name">,
            점수 : <input type="number" v-model.number="data.score">점
            <button v-on:click="removeData(index);">삭제</button>
        </div>
        <button v-on:click="sortDataAsc">오름차순</button>
        <button v-on:click="sortDataDesc">내림차순</button>
    </div>

    <script src="https://unpkg.com/vue@next"></script>
    <script>
        const app = Vue.createApp({
            data(){
                return {
                    inputData:{
                        name:"",
                        score:0,
                    },
                    dataList:[
                        {name:"피카츄", score:80},
                        {name:"라이츄", score:70},
                        {name:"파이리", score:60},
                        {name:"꼬부기", score:80},
                        {name:"버터플", score:65}
                    ],
                };
            },
            methods:{
                addData(){
                    if(this.inputData.name && this.inputData.score >= 0 && this.inputData.score <= 100) {
                        this.dataList.push(Object.assign({}, this.inputData));
                        this.inputData.name = "";
                        this.inputData.score = 0;
                    }
                },
                removeData(index){
                    this.dataList.splice(index, 1);
                },
                sortDataAsc(){
                    this.dataList.sort((a,b)=>a.score-b.score);
                },
                sortDataDesc(){
                    this.dataList.sort((a,b)=>b.score-a.score);
                },
            },
        });
        app.mount("#app");
    </script>
</body>
</html>

객체 기능 추가

객체에 메소드를 더 추가하여 구현한 코드는 다음과 같다.

<!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.0">
    <title>Vue for loop</title>
</head>
<body>
    <div id="app">
        <input type="text" v-model="inputData.name">
        <input type="number" v-model.number="inputData.score">
        <button v-on:click="addData">등록</button>
        <div v-for="(data, index) in dataList" v-bind:key="index">
            순서 : {{index}}, 
            이름 : <input type="text" v-model="data.name">,
            점수 : <input type="number" v-model.number="data.score">점
            <button v-on:click="removeData(index);">삭제</button>
        </div>
        <button v-on:click="sortDataAsc">오름차순</button>
        <button v-on:click="sortDataDesc">내림차순</button>
    </div>

    <script src="https://unpkg.com/vue@next"></script>
    <script>
        const app = Vue.createApp({
            data(){
                return {
                    inputData:{
                        name:"",
                        score:0,
                        clear(){
                            this.name = "";
                            this.score = 0;
                        },
                        get isNameValid(){
                            return this.name.length > 0;
                        },
                        get isScoreValid(){
                            return this.score >= 0 && this.score <= 100;
                        },
                        get isDataValid(){
                            return this.isNameValid && this.isScoreValid;
                        },
                        get copy(){
                            return Object.assign({}, this);
                        },
                    },
                    dataList:[
                        {name:"피카츄", score:80},
                        {name:"라이츄", score:70},
                        {name:"파이리", score:60},
                        {name:"꼬부기", score:80},
                        {name:"버터플", score:65}
                    ],
                };
            },
            methods:{
                addData(){
                    if(this.inputData.isDataValid) {
                        this.dataList.push(this.inputData.copy);
                        this.inputData.clear();
                    }
                },
                removeData(index){
                    this.dataList.splice(index, 1);
                },
                sortDataAsc(){
                    this.dataList.sort((a,b)=>a.score-b.score);
                },
                sortDataDesc(){
                    this.dataList.sort((a,b)=>b.score-a.score);
                },
            },
        });
        app.mount("#app");
    </script>
</body>
</html>
Previousv-ifNextVue-cli 3

Last updated 2 years ago