728x90
Vue3 이후, this 및 $router 등에 접근할 수 없음에 따라 useRouter를 사용해서 페이지 전환을 한다.
https://router.vuejs.kr/guide/advanced/composition-api.html
보통 페이지 전환 시, URL을 통해 넘길 파라미터를 주고 받는다.
하지만 URL에 노출하고 싶지 않은 파라미터나 데이터타입이 객체인 데이터를 주고 받을 때,
useRouter 내부 state 에 접근하여 객체를 주고 받으면 된다.
params 또는 query로 데이터를 주고 받을 때는 다음과 같이 데이터가 URL에 남는다.
메인.vue
<script setup>
const router = useRouter()
const data = { name : "kang", age : 25 }
//상세페이지로 이동
const move = () => {
router.push(
{
name: 'apps-detail-id', params: {id: 1 }, query : {data : JSON.stringify(data)}
}
)
}
</script>
<template>
<section>
<v-card-text>메인 페이지</v-card-text>
<v-btn @click="move">상세페이지</v-btn>
</section>
</template>
객체 데이터를 넘길 때는 JSON 문자열로 파싱하여 보내주고,
객체를 받는 상세 페이지 쪽에서 JSON.parse()를 이용해 다시 객체로 만들어준다.
아무튼, 다음과 같이 데이터를 넘겼다고 가정하면, 상세페이지의 URL은 다음과 같이 나온다.
http://localhost:8080/apps/detail/1?detailData={%22name%22:kang,%22age%22:25}
다음과 같이 내가 어떤 데이터를 주고 받고 있는지 노력하지 않아도 알 수 있다.
해당 객체 데이터를 감추고 페이지를 전환할 수 있도록 state를 사용해서 구현하자
메인.vue
<script setup>
const router = useRouter()
const data = { name : "kang", age : 25 }
//상세페이지로 이동
const move = () => {
router.push(
{
name: 'apps-detail-id', params: {id: 1 }, state : {data : JSON.stringify(data)}
}
)
}
</script>
<template>
<section>
<v-card-text>메인 페이지</v-card-text>
<v-btn @click="move">상세페이지</v-btn>
</section>
</template>
다음과 같이, state에 데이터를 담아서 페이지 이동을 할 경우 나오는 URL은 다음과 같다.
http://localhost:8080/apps/detail/1
다음은 상세 페이지에서 데이터를 가져오는 방법이다.
상세페이지.vue
<script setup>
const route = useRoute()
const {detailData} = history.state; // state에 담겨있는 값 가져오기
const obj = ref(JSON.parse(detailData)) // 데이터 파싱 후 옮겨 담기
watchEffect(
console.log("이름 :" + obj.value.name + "나이 : "+ obj.value.age)
)
</script>
<template>
<section>
<v-card-text>여기는 상세 페이지</v-card-text>
</section>
</template>
728x90
'개발 > FRONT' 카테고리의 다른 글
2024년 웹 개발 트렌드: 가장 인기 있는 프론트엔드 프레임워크 TOP 5 (0) | 2024.07.10 |
---|---|
[Vue3] Composition API 환경 컴포넌트 간 이벤트 전달하기 (2) | 2023.11.28 |
[Vue] [Vue warn]: Component inside <Transition> renders non-element root node that cannot be animated. 에러 해결 방법 (0) | 2023.10.31 |
[Vue] 라디오 버튼 형식의 체크박스 기능 개발하기 (0) | 2023.10.26 |
[Vue] 컴포넌트 간 파라미터 전달 방법 정리 (0) | 2023.10.25 |