zoaseo
To Infinity And Beyond
zoaseo
전체 방문자
오늘
어제
  • 분류 전체보기 (760)
    • 개발이 좋아서 (378)
      • SAP가 좋아서 (0)
      • Java가 좋아서 (42)
      • Spring이 좋아서 (50)
      • JPA가 좋아서 (0)
      • QueryDSL이 좋아서 (26)
      • Docker가 좋아서 (7)
      • Redis가 좋아서 (7)
      • AWS가 좋아서 (5)
      • CI/CD가 좋아서 (6)
      • Troubleshooting이 좋아서 (4)
      • Kotlin이 좋아서 (7)
      • SQL이 좋아서 (6)
      • HTTP가 좋아서 (21)
      • JavaScript가 좋아서 (30)
      • TypeScript가 좋아서 (6)
      • Vue가 좋아서 (21)
      • Flutter가 좋아서 (61)
      • React가 좋아서 (20)
      • Redux(React)가 좋아서 (2)
      • Angular가 좋아서 (22)
      • HTML이 좋아서 (9)
      • CSS가 좋아서 (15)
      • PHP가 좋아서 (9)
      • Illustrator가 좋아서 (2)
    • 노력이 좋아서 (169)
    • 결과물이 좋아서 (14)
    • 코딩연습이 좋아서 (168)
      • 이론이 좋아서 (62)
      • SQL이 좋아서 (90)
    • 유용한 사이트가 좋아서 (28)
    • Github (2)

인기 글

티스토리

hELLO · Designed By 정상우.
zoaseo

To Infinity And Beyond

개발이 좋아서/Vue가 좋아서

10장 이벤트 처리

2023. 9. 13. 17:17

1) event

<template>
    <div>
        <button @click="printEventInfo('Hello Vue3', $event)">
            inline event handler
        </button>
        <hr />
        <input type="text" @keyup="onKeyupHandler" />
    </div>
</template>

<script>
export default {
    setup() {
        const printEventInfo = (message, event) => {
            console.log('message: ', message);
            console.log('event.target: ', event.target);
            console.log('event.target.tagName: ', event.target.tagName);
        };
        const onKeyupHandler = event => {
            console.log('event.key: ', event.key);
        };
        return { printEventInfo, onKeyupHandler };
    },
};
</script>

<style lang="scss" scoped></style>

2) mouse

<template>
    <div>
        <div id="modifiers">
            <div @click="clickDiv">
                DIV 영역
                <p @click.self="clickP">
                    P 영역
                    <!-- <span @click.stop="clickSpan"> SPAN 영역 </span> -->
                    <span @click="clickSpan"> SPAN 영역 </span>
                    <a href="https://naver.com" @click.prevent.stop="clickA">a 영역</a>
                </p>
            </div>
        </div>
        <button @click.once="clickDiv">once</button>
    </div>
</template>

<script>
export default {
    setup() {
        const clickDiv = () => {
            console.log('clickDiv');
            // location.href = 'https://naver.com';
        };
        const clickP = () => {
            console.log('clickP');
        };
        const clickSpan = () => {
            console.log('clickSpan');
            // alert('좋아요');
        };
        const clickA = e => {
            // e.preventDefault();
            alert('어떤기능~');
        };
        return {
            clickDiv,
            clickP,
            clickSpan,
            clickA,
        };
    },
};
</script>

<style scoped>
#modifiers div,
#modifiers p,
#modifiers span {
    padding: 40px;
}
#modifiers div {
    background-color: #ccc;
}
#modifiers p {
    background-color: #999;
}
#modifiers span {
    background-color: #666;
    display: block;
}
</style>

3) keyboard

<template>
    <div>
        <input type="text" @keyup.ctrl.enter="addTodo" />
        <ul>
            <li v-for="(todo, index) in todos" :key="index">
                {{ todo }}
            </li>
        </ul>
    </div>
</template>

<script>
import { reactive } from 'vue';

export default {
    setup() {
        const todos = reactive([]);

        const addTodo = event => {
            todos.push(event.target.value);
            event.target.value = '';
            event.target.focus();
        };
        return { todos, addTodo };
    },
};
</script>

<style lang="scss" scoped></style>

'개발이 좋아서 > Vue가 좋아서' 카테고리의 다른 글

12장 Watch, WatchEffect  (0) 2023.09.14
11장 양방향 바인딩(v-model)  (0) 2023.09.14
9장 디렉티브  (0) 2023.09.13
8장 목록 렌더링(v-for)  (0) 2023.09.13
7장 조건부 렌더링(v-if, v-show)  (0) 2023.09.13

    티스토리툴바