: 네비게이션이 완료되고 호출!, 여기서는 쿼리스트링 값을 읽어와야 하므로 여기서 코드를 작성해야한다.
// router/index.js
router.afterEach((to, from) => {
setPrevRoute(from);
// 라우트에 movieId 쿼리가 있으면, 영화 상세 모달 노출
if (to.query.movieId) {
// 1.
store.commit("movie/SET_IS_DETAIL_MODAL", true);
}
});
- 'movie/SET_IS_DETAIL_MODAL'에서 movie는 해당 mutations가 속한 모듈 이름이다.
async fetchMovie() {
try {
console.log("[fetchMovie in moviedetailModal]");
this.isLoading = true;
await this.FETCH_SELECTED_MOVIE(this.movieId);
} catch (error) {
// 여기서 에러 핸들링!!
this.onError(error);
} finally {
console.log("finally");
this.isLoading = false;
}
},
onError(error) {
// 이전 라우트 경로를 받아온다.
const prevRoute = getPrevRoute();
// axios의 에러 response 객체
const { response } = error;
// response의 status 코드
const resStatus = response.status;
console.log("[resStatus in movieDetailModal] status : ", resStatus);
this.SET_IS_DETAIL_MODAL(false);
if (prevRoute) {
this.$router.push(prevRoute);
} else {
this.$router.push("/browse");
}
}
response.status 코드에 따라서 분기처리를 하고싶었지만, 그냥 에러가 발생했을 경우, 모달 컴포넌트를 제거하고 이전 경로로 이동하도록 로직을 구성했다.
만약 이전 라우트경로가 없을 경우 '/browse'로 이동하도록 설정했다.
호버 카드 컴포넌트를 만든다.
호버 카드안에 슬롯을 통해 원하는 엘리먼트를 넣는다.
MovieSlider안에 호버 카드 컴포넌트를 하나 둔다.
movieItem에 hover이벤트 혹은 mouseOver 이벤트가 발생할 경우 해당 movieItem의 offset을 적용해서 위치를 잡고 호버 카드 컴포넌트를 띄운다.
호버 카드에 영화 id값을 적용하고, selectedMovie 데이터를 스토어를 통해서 호출한다.
컴포넌트 구조, 호버 카드 (껍데기) > 영화 상세 아이템 (내용물)
: https://kr.vuejs.org/v2/guide/components-slots.html
<template>
<div class="hoverCard">
<slot>HoverCard 컴포넌트입니다.</slot>
</div>
</template>
<slot></slot>
안에 정의된 내용은 아무런 컨텐트도 전달되지 않았을 때 기본적으로 렌더링 될 내용
<template>
<HoverCard>
<div>MovieCardItem 컴포넌트입니다.</div>
</HoverCard>
</template>
<div>MovieCardItem 컴포넌트입니다.</div>
이 부분이 HoverCard의<slot></slot>
을 대체한다.
: 박스 그림자는 요소에서의 수평수직 거리(오프셋), 흐릿함과 확산 정도, 색상으로 이루어집니다.