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
- 페이징
- 스프링부트핵심가이드
- 서버설정
- 자료구조와 함께 배우는 알고리즘 입문
- d
- 티스토리 쿠키 삭제
- 코드로배우는스프링부트웹프로젝트
- 구멍가게코딩단
- 목록처리
- ㅒ
- GIT
- network configuration
- 스프링 시큐리티
- iterator
- 네트워크 설정
- 데비안
- 처음 만나는 AI수학 with Python
- 자료구조와함께배우는알고리즘입문
- 이터레이터
- baeldung
- 리눅스
- 선형대수
- 코드로배우는스프링웹프로젝트
- 처음 만나는 AI 수학 with Python
- resttemplate
- 알파회계
- Kernighan의 C언어 프로그래밍
- 친절한SQL튜닝
- 자바편
- /etc/network/interfaces
Archives
- Today
- Total
bright jazz music
blog20 : 글 내용 화면 만들기 본문
1. 글 내용 표시할 화면 파일 만들기 (ReadView.vue)
<!--ReadView.vue-->
<script setup lang="ts">
</script>
<template>
<h2>제목</h2>
<div>내용</div>
</template>
2. 라우터에 해당 컴포넌트 등록 (index.ts)
// index.ts
import { createRouter, createWebHistory } from "vue-router";
import HomeView from "../views/HomeView.vue";
import WriteView from "../views/WriteView.vue"
import ReadView from "../views/ReadView.vue"; //경로를 적어줌으로써 import 필요
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
{
path: "/", //루트 경로라면
name: "home", //home 뷰를 불러온다.
component: HomeView,
},
{
path: "/write",
name: "write",
component : WriteView //import가 필요하다.
},
{
path: "/read",
name: "read",
component: ReadView
}
],
});
export default router;
3. 글 리스트에서 클릭했을 때 내용 보여주기
<a href="">를 새요해도 되긴 하지만 그렇게 하면 application 전체를 다시 불러오기 때문에 resource낭비가 심하다.
따라서 <router-link>를 사용한다.
먼저 router-link를 사용 테스트
<!--HomeView.vue-->
<script setup lang="ts">
import axios from "axios";
import {ref} from "vue";
import {useRouter} from "vue-router";
const router = useRouter();
// const posts = [] 반응형 데이터가 아니면 안나옴
const posts = ref([])
//페이지, 사이즈도 넘겨야 함
axios.get("/api/posts?page=1&size=5").then((response) => {
// console.log(response)
response.data.forEach((r : any) => {
// posts.push(r) 반응형 데이터는 value로 접근해야 함
posts.value.push(r)
});
});
//내용보기용 함수
const moveToRead = () => {
router.push({name: "read"}); //라우터에 name이 read인 것을 push
}
</script>
<template>
<ul>
<!-- 반복문 사용 vue2.2.0이상부터는 v-for에 key 사용 필수-->
<li v-for="post in posts" :key="post.id">
<div>
<router-link to="/read">{{post.title}}</router-link> <!-- 라우터 링크를 사용해서 해당 리소스만 가져옴.-->
</div>
<div>
{{post.content}}
</div>
</li>
</ul>
</template>
<style scoped>
li {
margin-bottom: 1rem;
}
li:last-child{
margin-bottom: 0;
}
</style>
4. 파라미터 같이 넘겨주기
<!--HomeView.vue-->
<script setup lang="ts">
import axios from "axios";
import {ref} from "vue";
import {useRouter} from "vue-router";
const router = useRouter();
// const posts = [] 반응형 데이터가 아니면 안나옴
const posts = ref([])
//페이지, 사이즈도 넘겨야 함
axios.get("/api/posts?page=1&size=5").then((response) => {
// console.log(response)
response.data.forEach((r : any) => {
// posts.push(r) 반응형 데이터는 value로 접근해야 함
posts.value.push(r)
});
});
//내용보기용 함수
const moveToRead = () => {
router.push({name: "read"}); //라우터에 name이 read인 것을 push
}
</script>
<template>
<ul>
<!-- 반복문 사용 vue2.2.0이상부터는 v-for에 key 사용 필수-->
<li v-for="post in posts" :key="post.id">
<div>
<!-- 라우터 링크를 사용해서 해당 리소스만 가져옴. 요청 시 파라미터도 함께 넘김-->
<!--반드시 :to 를 써줘야 함. -->
<router-link :to="{name: 'read', params: {postId: post.id}}"> {{post.title}}</router-link>
</div>
<div>
{{post.content}}
</div>
</li>
</ul>
</template>
<style scoped>
li {
margin-bottom: 1rem;
}
li:last-child{
margin-bottom: 0;
}
</style>
read 컴포넌트에서 파라미터를 함께 받을 수 있도록 라우터(index.ts에 파리미터 넣어주기)
// index.ts
import { createRouter, createWebHistory } from "vue-router";
import HomeView from "../views/HomeView.vue";
import WriteView from "../views/WriteView.vue"
import ReadView from "../views/ReadView.vue"; //경로를 적어줌으로써 import 필요
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
{
path: "/", //루트 경로라면
name: "home", //home 뷰를 불러온다.
component: HomeView,
},
{
path: "/write",
name: "write",
component : WriteView //import가 필요하다.
},
{
// path: "/read",
path: "/read/:postId", //파라미터를 받을 수 있도록 설정 ######
name: "read",
component: ReadView,
props: true, //해당 변수는 ReadView 컴포넌트에서 받을 수 있게 하겠다
}
],
});
export default router;
5. 넘긴 파라미터 axios로 서버에 보내서 글 정보 가져오기
<!--ReadView.vue-->
<script setup lang="ts">
// 추가
import {defineProps, onMounted, ref} from "vue"
import axios from "axios";
const props = defineProps({
postId: {
type: [Number, String], //url로 파라미터가 넘어가기 때문에 String값으로 받음. 따라서 둘다 받을 수 있도록 처리
require: true,
}
})
const post = ref({
id: 0,
title: "",
content: "",
});
onMounted(() => {
//console.log(props.postId) 파라미터가 잘 넘어가는 걸 확인했음.
axios.get(`/api/posts/${props.postId}`)
.then((response) => {
post.value = response.data;
});
});
// \추가
</script>
<template>
<h2>{{post.title}}</h2>
<div>{{post.content}}</div>
</template>
현재 초기화 코드라든지, 서버에 파라미터를 넘겨 값을 받아오는 방식에도 문제가 있다.
추후 코드는 개선한다.
'Projects > blog' 카테고리의 다른 글
blog22 : 화면 꾸미기 (0) | 2023.02.04 |
---|---|
blog21 : 글 수정 화면 만들기 (0) | 2023.02.04 |
blog19 : 글 리스트 화면 만들기 (0) | 2023.02.03 |
blog18 : CORS문제 해결 (server.proxy) (0) | 2023.02.03 |
blog17 : 글 작성화면 만들기 2 (1) | 2023.02.01 |
Comments