Vue Router의 페이지 네이션 라이프 사이클
8683 단어 vue-routerVue.js
해결해야 할 문제
매개변수 또는 쿼리 변경은 enter/leave 네비게이션 가드를 트리거하지 않습니다.
예를 들어 검색 쿼리가 변경된 것만으로는 구성 요소가 업데이트되지 않습니다.
해결책
공식 사이트에 쓰여진 대로 beforeRouteUpdate(to, from, next)를 사용한다.
/users?page=1에서/users?page=2로 이동할 때 등으로 불린다.
페이지 네이션 라이프 사이클
/users라는 목록 화면을 생각한다.
index.jsimport Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);
import UserIndex from 'path/to/UserIndex';
const routes = [
{ path: '/users', name: 'users', component: UserIndex },
];
const router = new VueRouter({
mode: 'history',
routes,
});
const app = new Vue({
router
}).$mount('#app');
UserIndex.vue<template>
...
</template>
<script>
export default {
data () {
return {
baseUrl: '/users',
query: {},
data: [],
}
},
mounted () {
const url = this.makeUrl(this.baseUrl, this.$route.query);
this.fetchUserList(url);
},
beforeRouteUpdate (to, from, next) {
const url = this.makeUrl(this.baseUrl, to.query);
this.fetchUserList(url);
next();
},
methods: {
makeUrl (url, query) {
// 検索条件を元にURL作成
},
fetchUserList (url) {
// APIなどからデータ取得
},
search () {
this.query.page = 1;
const url = this.makeUrl(this.baseUrl, this.query);
this.$router.push(url);
},
changePage (page) {
this.query.page = 1;
const url = this.makeUrl(this.baseUrl, this.query);
this.$router.push(url);
},
},
}
</script>
첫회 표시로부터 검색, 페이지 이동의 흐름을 이하에 정리했다.
공식 사이트에 쓰여진 대로 beforeRouteUpdate(to, from, next)를 사용한다.
/users?page=1에서/users?page=2로 이동할 때 등으로 불린다.
페이지 네이션 라이프 사이클
/users라는 목록 화면을 생각한다.
index.jsimport Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);
import UserIndex from 'path/to/UserIndex';
const routes = [
{ path: '/users', name: 'users', component: UserIndex },
];
const router = new VueRouter({
mode: 'history',
routes,
});
const app = new Vue({
router
}).$mount('#app');
UserIndex.vue<template>
...
</template>
<script>
export default {
data () {
return {
baseUrl: '/users',
query: {},
data: [],
}
},
mounted () {
const url = this.makeUrl(this.baseUrl, this.$route.query);
this.fetchUserList(url);
},
beforeRouteUpdate (to, from, next) {
const url = this.makeUrl(this.baseUrl, to.query);
this.fetchUserList(url);
next();
},
methods: {
makeUrl (url, query) {
// 検索条件を元にURL作成
},
fetchUserList (url) {
// APIなどからデータ取得
},
search () {
this.query.page = 1;
const url = this.makeUrl(this.baseUrl, this.query);
this.$router.push(url);
},
changePage (page) {
this.query.page = 1;
const url = this.makeUrl(this.baseUrl, this.query);
this.$router.push(url);
},
},
}
</script>
첫회 표시로부터 검색, 페이지 이동의 흐름을 이하에 정리했다.
import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);
import UserIndex from 'path/to/UserIndex';
const routes = [
{ path: '/users', name: 'users', component: UserIndex },
];
const router = new VueRouter({
mode: 'history',
routes,
});
const app = new Vue({
router
}).$mount('#app');
<template>
...
</template>
<script>
export default {
data () {
return {
baseUrl: '/users',
query: {},
data: [],
}
},
mounted () {
const url = this.makeUrl(this.baseUrl, this.$route.query);
this.fetchUserList(url);
},
beforeRouteUpdate (to, from, next) {
const url = this.makeUrl(this.baseUrl, to.query);
this.fetchUserList(url);
next();
},
methods: {
makeUrl (url, query) {
// 検索条件を元にURL作成
},
fetchUserList (url) {
// APIなどからデータ取得
},
search () {
this.query.page = 1;
const url = this.makeUrl(this.baseUrl, this.query);
this.$router.push(url);
},
changePage (page) {
this.query.page = 1;
const url = this.makeUrl(this.baseUrl, this.query);
this.$router.push(url);
},
},
}
</script>
이런 느낌일까요?
URL을 바탕으로 처리를 실행하는 느낌입니다.
이번에는 Vuex 빼고 했지만, Vuex 있어도 흐름은 변하지 않습니다.
뭔가 도움이되면 다행입니다
Reference
이 문제에 관하여(Vue Router의 페이지 네이션 라이프 사이클), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kiyc/items/42636f3e647dd9c25342텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)