반응형
Vue의 공리에 페이지 지정 매개 변수 추가
나는 이것을 가지고 있다.Store
:
const getDefaultState = () => {
return {
resources: Object,
loading: false,
query: {
title: null,
page: 1
},
checked: {
type: Array,
required: false
},
resource: null
};
};
export default {
namespaced: true,
state: getDefaultState(),
getters: {
resources(state) {
return state.resources;
}
},
mutations: {
RESET_STATE(state) {
Object.assign(state, getDefaultState());
},
SET_RESOURCES(state, resources) {
state.resources = resources;
},
SET_QUERY(state, query) {
state.query = query;
},
CHECK_RESOURCE(state, resource) {
if (state.checked.includes(resource)) {
state.checked = state.checked
.slice(0, resource)
.concat(state.checked.slice(i + 1, state.checked.length));
} else {
state.checked.push(resource);
}
},
FETCH_START(state) {
state.loading = true;
},
FETCH_END(state) {
state.loading = false;
}
},
actions: {
resetState({ commit }) {
commit("RESET_STATE");
},
fetchResources({ commit }) {
commit("FETCH_START");
debugger;
axios
.get(route("sell_orders.index"), { params: this.state.query })
.then(response => {
return commit("SET_RESOURCES", response.data);
})
.catch(error => {
throw new Error(error);
})
.finally(() => commit("FETCH_END"));
},
checkResource({ commit }, resource) {
commit("CHECK_RESOURCE", resource);
},
setQuery({ commit }, query) {
commit("SET_QUERY", query);
}
}
};
Vue 페이지:
<template>
<div class="w-full">
<div class="card-header">
<span>{{ __("validation.attributes.sell_order_id") }}</span>
</div>
<div class="card-body">
<sell-order-search
:query="this.$store.state.sellOrder.query"
@search="this.search"
@reset="this.reset"
></sell-order-search>
<scale-loader
v-if="this.$store.state.sellOrder.loading"
:loading="true"
></scale-loader>
<div v-else>
<sell-order-table
:resources="this.$store.state.sellOrder.resources"
@select="checkResource"
v-slot="slotProps"
>
<template class="flex justify-between">
<router-link
class="btn-blue"
:to="{ name: 'sellOrderEdit', params: {
id: slotProps.resource.id
} }"
v-if="Auth.can('UpdateSellOrder')"
>
<font-awesome-icon icon="pen" class="align-middle">
</font-awesome-icon>
<span>{{ __("words.edit") }}</span>
</router-link>
<router-link
class="btn-red"
:to="{ name: 'sellOrderDelete', params: {
id: slotProps.resource.id
} }"
v-if="Auth.can('DeleteSellOrder')"
>
<font-awesome-icon icon="trash" class="align-middle">
</font-awesome-icon>
<span>{{ __("words.delete") }}</span>
</router-link>
<router-link
class="btn-orange"
:to="{ name: 'sellOrderShow', params: {
id: slotProps.resource.id
} }"
v-if="Auth.can('ShowSellOrder')"
>
<font-awesome-icon icon="eye" class="align-middle">
</font-awesome-icon>
<span>{{ __("words.show") }}</span>
</router-link>
</template>
</sell-order-table>
<pagination
:meta="this.$store.state.sellOrder.resources.meta"
@paginate="paginate"
></pagination>
</div>
</div>
</div>
</template>
<script>
import { mapGetters, mapState } from "vuex";
export default {
name: "sellOrderIndexPage",
computed: mapState(["resources", "loading", "query"]),
methods: {
checkResource(resource) {
return this.$store.dispatch("sellOrder/checkResource");
},
getResources() {
this.$store.dispatch("sellOrder/fetchResources");
},
paginate(page) {
debugger;
let query = {
page: page,
title: this.$store.state.sellOrder.query.title
};
this.$store.dispatch("sellOrder/setQuery", {
query: query
});
this.$router.push({
name: "sellOrderIndex",
query: query
});
},
search() {
this.$router.push({
name: "sellOrderIndex",
query: this.store.query
});
},
reset() {
this.$store.dispatch("sellOrder/resetState");
}
},
created() {
if (this.$route.query.page) {
this.$store.state.sellOrder.query.page = this.$route.query.page;
}
if (this.$route.query.title) {
this.$store.state.sellOrder.query.title = this.$route.query.title;
}
this.getResources();
}
};
</script>
그러나 두 번째 페이지를 클릭하면 페이지 URL:/sell-order?page=3
, 그러나 제출된 요청 URL은/sell-order
, 그리고 params는 Axios에서 제출되지 않는다.
내 실수는 어디 있지?
Vuex의 동작과 돌연변이는 순수한 기능이다 - 그것들은 어떤 것과도 구속되지 않는다.this
문맥의컨텍스트는 함수의 첫 번째 인수로 전달되므로, 예를 들어 다음과 같이 객체의 구조를 파괴하면 된다.
fetchResources({ commit, state })
그러면 당신은 그 곳에 직접 접근할 수 있을 것이다.state
- 그래서 더 이상 필요 없다.this.
접두사를 붙이다
.get(route("sell_orders.index"), { params: state.query })
참조URL: https://stackoverflow.com/questions/57935056/add-pagination-params-to-axios-in-vue
반응형
'IT이야기' 카테고리의 다른 글
색상 이름, 각도 등을 구성하는 동적 변수로 구성된 선형 그라데이션 배경 속성을 어떻게 바인딩할 수 있는가? (0) | 2022.05.19 |
---|---|
Vue.js 단일 파일 구성 요소의 데이터 가져오기 (0) | 2022.05.19 |
C에서 인트 크기의 "적어도"를 어떻게 요청해야 하는가? (0) | 2022.05.19 |
Vue 2 제공 / 주입 API를 반응적으로 만드는 방법 (0) | 2022.05.19 |
size_t의 최대값을 찾기 위한 휴대용 방법은 무엇인가? (0) | 2022.05.19 |