@ildar-meyker

Как заставить компонент обновиться при изменении query параметра?

Я получаю данные от api, вместе со ссылками пагинации. На текущий момент ссылки в адресной строке меняются, но компонент не обновляется. Я так понимаю, mounted срабатывает единожды. Как правильно все сделать в данном случае? Как отслеживать изменение page и обновлять список объектов на странице?

<nav v-if="meta">
    <ul class="pagination">
        <template v-for="link in meta.links">
            <li
                :class="['page-item', { active: link.active }]"
                v-if="link.url"
            >
                <router-link
                    class="page-link"
                    :to="modifyUrl(link.url)"
                >
                    <span v-html="link.label"></span>
                </router-link>
            </li>
            <li class="page-item disabled" v-else>
                <span class="page-link" v-html="link.label"></span>
            </li>
        </template>
    </ul>
</nav>


const router = new VueRouter({
    mode: 'history',
    routes: [
        {
            path: '/admin',
            component: Dashboard
        }, {
            path: '/admin/lyrics/inbox',
            component: LyricsInbox
        }
    ]
});

const app = new Vue({
    el: '#app',
    components: { App },
    router
});


import axios from "axios";

export default {
    data() {
        return {
            loading: false,
            lyrics: [],
            meta: null,
        };
    },
    mounted() {
        this.loadLyrics(this.$route.query.page);
    },

    methods: {
        loadLyrics(page = 1) {
            this.loading = true;

            axios
                .get("/api/lyrics/inbox?page=" + page)
                .then((response) => {
                    this.lyrics = response.data.data;
                    this.meta = response.data.meta;
                })
                .catch((error) => {
                    console.error(error);
                })
                .finally(() => {
                    this.loading = false;
                });
        },

        modifyUrl(url) {
            return url.replace(/^http.*?\/api\//, "/admin/");
        },
    },
};
  • Вопрос задан
  • 421 просмотр
Решения вопроса 1
swert-tech
@swert-tech
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы