路由参数改变,页面数据不更新解决方法:
http://localhost:8080/#test?id=1
http://localhost:8080/#test?id=2,参数切换后,数据未更新
vue-router同路由$router.push不跳转一个简单解决方案
vue-router跳转一般是这么写:
toCurrentPage: function(thisId){
this.$router.push({path:'/test ', query: { id: thisId, option: ""}});
}
1
2
3
2
3
但是当遇到,需要跳转同页面不同query的情况,上面的方法不起作用。当然了,从性能来说,理论上这种情况最佳的解决方案,是把需要刷新的包裹成一个init function,跳转的方法,传参再次调用init方法。balabalabala……不在赘述。
但是另一些情况,基本页面所有组件都需要刷新,再次加载对开销影响不大,需要history.back以保证操作逻辑顺畅……我们只要跳转加载如此而已,那么其实也很简单,只需在上述方法基础上加上:
watch: {
'$route' (to, from) {
this.$router.go(0);
}
},
1
2
3
4
5
2
3
4
5
下面是实际使用有效方法二则:
#方法一
# 通过路由传参跳转界面,页面没有刷新
# 解决方法:在 router-view 中加 :key="$route.fullPath"
<router-view :key="$route.fullPath"></router-view>
1
#方法二 再跳转后的路由观察路由变化,进行页面刷新(这种方法相对来说会加载慢一些,用户体验差)。
watch: {
'$route' (to, from) {
this.$router.go(0);
}
}
1
2
3
4
5
2
3
4
5
附一个完整页面示例:
<template>
<div>
<div class="container">
<ul class="list-unstyled">
<li v-for="item in list" :key="item.GeneralID"><a href="javascript:;" @click="navTo(item)">{{item.Title}}</a></li>
</ul>
</div>
</div>
</template>
<script>
export default {
data: function() {
var model = {
list: []
};
var nid = this.$route.params.nid;
this.jsp("content_list", {"nid": nid}).then((ret) => {
model.list = JSON.parse(ret.result);
});
return model;
},
methods: {
navTo:function(item){this.$router.push("/Content/"+item.GeneralID);}
},
watch: {
'$route' (to, from) {
this.$router.go(0);
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31