抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

问题

写了一个菜单,利用的动态路由,我第一次从首页跳转的时候,获取到了内容,但再次回到首页或者再次跳转到其他菜单,页面内容没有变化,打开network,发现请求都没有发送。

App.vue文件内容如下

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
<template>
<div id="app">
<div id="header">
<router-link to="/"> <img src="blog-logo.png" alt="logo" class="logo"></router-link>

<div id="menu_1">
<p>Ryan's Blog</p>
<ul class="top_menu">
<li><router-link to="/blog/linux">Linux</router-link></li>
<li><router-link to="/blog/python">Python</router-link></li>
<li><router-link to="/blog/django">Django</router-link></li>
<li><router-link to="/blog/jmeter">Jmeter</router-link></li>
<li><router-link to="/blog/robotframework">Robotframework</router-link></li>
<li><router-link to="/blog/tools">Tools</router-link></li>
<li><router-link to="/blog/test">Test</router-link></li>
</ul>
</div>

<div id="menu_2">
<searchbar/>
</div>
</div>

<div id="body">
<div id="content">
<router-view/>
</div>
</div>

</div>
</template>

对应路由的vue文件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
mounted() {
let category_type = this.$route.params.categorytype;
this.user_url = '/api/blog/blog_list';
const result =new RequestUtils(this.user_url,
{
"category_type": category_type,
"page": this.currentPage,
"size": this.pagesize
});
result.get_method()
.then((response) => {
if (response.data["code"] === "0"){
if (response.data["data"]["blog_list"].length>0) {
this.blog_list = response.data["data"]["blog_list"];
this.total_nums = response.data["data"]["total_nums"];
this.should_show = true;
}else this.should_show = false;
}
else {
this.should_show = false;
this.$message.error("出错了: "+response.data["data"]);
}
})
.catch((error) => {
this.$message.error(error)
});
}

原因

百度一番得到了回答:某个路由已经在本地加载过了,即已经将生命周期走到了mounted的时候,如果我们再进入这个页面,不会再执行created和mounted里面的方法。 (https://blog.csdn.net/zemprogram/article/details/95759634)

需要写一个监听方法,当url发生变化自动执行其下代码。

解决方法

改造一下代码,首先把发请求这块放在methods里,如get_blog_list,mounted中执行get_blog_list保证首次进入没问题。

然后在watch中监听$route,一旦变化,执行get_blog_list方法,保证发送了请求。

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
32
33
34
35
36
37
mounted() {
this.get_blog_list()
},

watch: {
'$route':'get_blog_list'
},

methods: {
get_blog_list: function(){
let category_type = this.$route.params.categorytype;
this.user_url = '/api/blog/blog_list';
const result =new RequestUtils(this.user_url,
{
"category_type": category_type,
"page": this.currentPage,
"size": this.pagesize
});
result.get_method()
.then((response) => {
if (response.data["code"] === "0"){
if (response.data["data"]["blog_list"].length>0) {
this.blog_list = response.data["data"]["blog_list"];
this.total_nums = response.data["data"]["total_nums"];
this.should_show = true;
}else this.should_show = false;
}
else {
this.should_show = false;
this.$message.error("出错了: "+response.data["data"]);
}
})
.catch((error) => {
this.should_show = false;
this.$message.error(error)
});
},

评论