자세 한 내용 은 Vue Router 내 비게 이 션 갈고리 와 Vuex 를 사용 하여 후퇴 상태 저장 을 실현 합 니 다.
수요
최근 에 사용 하고 있 습 니 다electron-vue크로스 플랫폼 의 데스크 톱 엔 드 소프트웨어 를 개발 하고 있 습 니 다.방금 몇 페이지 를 손 으로 썼 는데 문제 가 발생 했 습 니 다.데스크 톱 엔 드 소프트웨어 는 보통 네 비게 이 션 수요 가 있 습 니 다.다음 그림 과 같 습 니 다.
탐색 단추
반환 단 추 를 누 르 면 이전 페이지 로 돌아 가 고 이전 페이지 의 내용 을 표시 합 니 다.사실 앱 뿐만 아니 라 일반 웹 페이지 에서 도 이러한 수요 가 있 습 니 다.특히 vue 를 사용 하여 SPA 를 쓸 때.
프로젝트 의 내 비게 이 션 은 거의 router.push({name:xxx',params:{xxx:123...})방식 을 사용 합 니 다.이러한 방식 으로 인 한 직접적인 문 제 는 후퇴 버튼(router.go(-1)을 누 르 면 history 에 URL 만 저장 하고 params 대상 을 잃 어 버 려 서 params 에 의존 하 는 페이지 렌 더 링 이 이상 하 다 는 것 이다.
해결
사실 생각 은 매우 간단 하 다.후퇴 작업 에서 params 를 잃 어 버 렸 으 니 우 리 는 당연히 params 를 어떻게 저장 하 는 지 생각 할 것 이다.그래,이렇게 거 칠 어.잃 어 버 리 려 면 내 가 보관 해 줄 게!
어떻게 저장 하 는 지:사실 이것 은 크로스 구성 요소 통신 문제 라 고 생각 하지 않 아 도 됩 니 다.그래서 자 연 스 럽 습 니 다.Vuex 로 저장 하 는 것 이 가장 상식 적 입 니 다!
언제 저장 합 니까?첫 번 째 반응 은 router.push({name:xxx',params:{xxx:123...})를 호출 할 때 저장 합 니 다.그리고 이 URL 로 탐색 하면 params 가 없 으 면 vuex store 에서 가 져 오 십시오.맞 는 것 같 아,그냥 좀 귀 찮 은 것 같 아!!당황 하지 마 세 요.네 비게 이 션 갈고리 router.beforeech(to,from,next)=>{/...}가 있 습 니 다!
이름 그대로 vue-router 가 제공 하 는 네 비게 이 션 갈 고 리 는 네 비게 이 션 을 차단 하여 점프 를 완성 하거나 취소 하 는 데 사 용 됩 니 다.
여기까지 말 하면 너 는 나의 해결 방향 을 완전히 알 아야 한다.그러면 다음은 쓸데없는 말 을 많이 하지 않 겠 다.코드 를 올 려 라.
/*
Vuex store RouterParams
*/
//...
const state = {
// map,key: name,value: params
paramMap: {}
}
const mutations = {
REFRESHPARAM (state, paramKV) {
//mutation, ?
Vue.set(state.paramMap, paramKV.key, paramKV.value)
}
}
//...
/*
router
*/
const router = new VueRouter({ ... }) //router
router.beforeEach((to, from, next) => {
// params " "
if (Object.keys(to.params).length === 0) {
// store params, ,
Object.assign(to.params, store.state.RouterParams.paramMap[to.name] || {})
}
// params
store.commit('REFRESHPARAM', {key: to.name, value: to.params})
next() // , “ ” 。:-D
})
//...
쉽 죠?총 몇 줄 의 코드 O(∩∩)O~이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Vue Render 함수로 DOM 노드 코드 인스턴스 만들기render에서createElement 함수를 사용하여 DOM 노드를 만드는 것은 직관적이지 않지만 일부 독립 구성 요소의 디자인에서 특수한 수요를 충족시킬 수 있습니다.간단한 렌더링 예는 다음과 같습니다. 또한 v...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.