api/events?filter[filter]=123&page=5&sort=-datethis.$axios.$get('events', { params: {filter: this.filter.q, page: this.pagination.page, sort: this.sort});?filter={"filter":123}?filter[filter]=123 var unencoded = qs.stringify({ a: { b: 'c' } }, { encode: false });
assert.equal(unencoded, 'a[b]=c');{
params: {
filter: {filter: this.filter.q},
},
paramsSerializer: function (params) {
return Qs.stringify(params, {arrayFormat: 'brackets', encode: false})
},
}
<b-input
type="search"
v-model="q"
placeholder="Поиск..."
@keydown.enter="search"
autofocus
/>async created() {
await this.getAll({
page: this.$route.query.page,
filter: this.$route.query.q,
sort: this.$route.query.sort
})
},async getAll({commit}, { page, filter = null, sort = null}) {
const res = await this.$axios.$get('events', {
params: {
page: page,
filter: filter,
sort: sort
}
});
commit('SET_EVENTS', res.items)
},['@nuxtjs/axios', {
baseURL: 'http://127.0.0.1:8000/api',
paramsSerializer: function (params) {
return Qs.stringify(params, {arrayFormat: 'brackets', encode: false})
},
}],И что у вас не работает? Такой же результат выдает?Не работает именно фильтрация из поля input. Не может распарсить такой запрос. page и sort работает
А вы уверены, что encode: false нужен вам на всех запросах?
const res = await this.$axios.$get('events', {
params: {
filter: { filter: 123 },
}
});http://127.0.0.1:8000/api/events?filter=%7B%22filter%22:123%7Dhttp://127.0.0.1:8000/api/events?filter[filter]=123
Если делаю прямо в store, то ошибка:
index.js?8535:43 Uncaught (in promise) ReferenceError: qs is not defined
const qs = require("qs");127.0.0.1:8000/api/events?filter=%7B%22filter%22:123%7D
async getAll({commit}, { page, filter, sort}) {
const res = await this.$axios.$get('events', {
params: {
page: page,
filter: { filter: filter },
sort: sort,
},
paramsSerializer: function (params) {
return qs.stringify(params, {arrayFormat: 'brackets', encode: false})
},
});
commit('SET_EVENTS', res.items)
По-моему сортировку лучше сделать перед коммитом.
async created() {
await this.getAll({
page: this.$route.query.page,
filter: this.$route.query.q,
sort: this.$route.query.sort
})
},async fetch({store, params}) {
await store.dispatch('events/getAll');
} При таком случае загрузка страницы после загрузки данных.
Единственное напрягает, что метод created загружает страницу, а потом данные. Немного не красиво смотрится.
Получаю из строки. А вот как при нажатии enter фильтровать по поиску и при переходе на другую страницу обновлять стор используя новый запрос