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
- mariadb
- frontend
- 성장기
- SSE
- ServerSentEvent
- Lag
- 개발자
- 열공하자
- PostgreSQL
- node.js
- node.js란
- Node.js기본
- 실시간알림
- partitioning
- EventSource
- 파티셔닝
- localStorage
- Partition
Archives
- Today
- Total
써치킴의 우당탕탕 개발 블로그
[Vue.js][Ch4][영화검색 사이트] Nav 경로 일치 및 활성화 본문
1. MovieItem.vue > 영화 포스터 클릭하면 상세페이지로 이동할 수 있게 수정
<template>
<!-- 배경으로 영화 포스터를 출력, 내부에 영화 정보 출력 -->
<RouterLink
:to="`/movie/${movie.imdbID}`"
:style="{ backgroundImage: `url(${movie.Poster})` }"
class="movie">
<!-- imageLoading이 true일 때, Loader 출력
/ size = 1.5 : size는 1.5rem
/ absolute = true : 부모 요소(div)의 가운데에 배치 -->
<Loader
v-if="imageLoading"
:size="1.5"
absolute />
<div class="info">
<div class="year">
{{ movie.Year }}
</div>
<div class="title">
{{ movie.Title }}
</div>
</div>
</RouterLink>
</template>
- 영화 이미지에 해당하는 div -> RouterLink 컴포넌트로 변경
- 영화 상세 페이지로 이동되게 to 속성 사용
2. Movie 네비게이션이 활성화할 수 있도록 Header.vue 수정
<template>
<header>
<Logo />
<div class="nav nav-pills">
<div
v-for="nav in navigations"
:key="nav.name"
class="nav-item">
<!-- RouterLink
- vue-router에서는 페이지 이동할 수 있는 a 태그 대신에 RouterLink라는 컴포넌트를 제공
- a 태그의 href와 같은 기능으로 to라는 속성을 제공
- RouterLink는 현재 페이지에 어떤 navigation이 활성화되었는지 확인할 수 있음
=> active-class을 이용해 RouterLink에 active를 추가
- nav.path가 일치하면 active 클래스 추가 -->
<RouterLink
:to="nav.href"
:class="{ active: isMatch(nav.path) }"
active-class="active"
class="nav-link">
{{ nav.name }}
</RouterLink>
</div>
</div>
</header>
</template>
<script>
import Logo from '~/components/Logo'
export default {
components: {
Logo
},
data() {
return {
navigations: [
{
name: 'Search',
href: '/'
},
{
name: 'Movie',
href: '/movie/tt4520988', // tt4520988 : 겨울왕국2 영화 ID
path: /^\/movie/ // /movie로 시작하는 경로인 경우, 일치(정규표현식 사용)
},
{
name: 'About',
href: '/about'
}
]
}
},
methods: {
isMatch(path) {
if(!path) return false; // path가 없으면 매치 안할거다!(false)
return path.test(this.$route.fullPath); // 실제 url 주소가 정규표현식과 일치하는지 확인
}
}
}
</script>
<style lang="scss" scoped>
header {
height: 70px;
padding: 0 40px;
display: flex;
align-items: center;
.logo {
margin-right: 40px;
}
}
</style>
- navigations > name이 Movie인 객체에 path 속성 추가
- path: /^\/movie/ (정규표현식 추가)
- isMatch 메소드 추가
- navigations에 path 데이터가 없으면 false 반환
- path 데이터가 있으면 실제 url 주소가 path 정교표현식이 일치하는지 비교
- RouterLink > nav.path가 일치하면 active 클래스 추가
출력
영화 목록에서 영화 선택하면 상세 페이지로 이동 + 네비게이션의 Movie > active 처리됨
'완벽하게 Vue.js' 카테고리의 다른 글
[Vue.js][Ch4][영화검색 사이트] 404 Page Not Found (0) | 2022.05.01 |
---|---|
[Vue.js][Ch4][영화검색 사이트] About (0) | 2022.04.29 |
[Vue.js][Ch4][영화검색 사이트] 영화 포스터가 없는 경우 예외 처리 (0) | 2022.04.28 |
[Vue.js][Ch4][영화검색 사이트] Vue 플러그인(이미지 로드 이벤트) (0) | 2022.04.28 |
[Vue.js][Ch4][영화검색 사이트] 더 높은 해상도의 영화 포스터 가져오기 (0) | 2022.04.28 |
Comments