在用Vue开发的过程中总会遇到这样或者那样的坑。vue的路由发生变化分两种情况,一种是pathname变化(或是hash变化),第二种是参数变化,第一种发生变化时,组件会重新加载,各个生命周期都会执行。
但是如果参数发生变化,组件是无法感知的,这里需要用到watch方法监听$route,从而根据路由后面的参数不同做出不同的操作。
比如实现如下功能:
点击不用的链接,路由的参数发生变化,页面加载相应的内容。
代码如下:
<template>
<ul>
<li v-for="item in list" :key="item.id">
<span>{{item.title}}</span>
</li>
</ul>
</template>
<script>
export default {
data() {
return {
list: [],
tab: this.$route.query.tab
};
},
created() {
this.getData(this.tab);
},
methods: {
getData(arg) {
this.axios
.get("https://cnodejs.org/api/v1/topics", { params: { tab: arg } })
.then(data => {
this.list = data.data.data;
});
}
},
watch: {
$route() {
this.getData(this.$route.query.tab);
}
}
};
</script>
<style>
</style>
主要代码就是这一行: