在搜索页面,使用beforeRouteUpdate()搜索,另外search_key不需要存到vuex,点击button是,router.push(params:key),在搜索页面beforerouteenter()用to.params.key获取到keyword
因为你 search
组件已经在第一次搜索中处于激活状态了,重发路由是不会引发组件重载的,这是为了渲染性能的考虑,对于搜索结果的查询和页面的展示应该去监听这个参数的变化去发起请求,而不是把重点放在页面的重载上。比如按照你的参数在结果展示的视图中监听this.$route.params.key_word
:
watch: {
'$route.params.key_word' (value, oldValue) {
// 查询请求
search(value)
}
}
另外对于vuex
来说,如果你的搜索组件需要跨页面保存搜索状态,可以用它来实现,它是管理全局的状态,比如你在搜索框里输入了一个关键字,然后给他一个dispatch的操作去修改储存在全局中的关键字变量,在查询请求所在的页面中监听这个值的变化,去触发搜索请求。具体来说是这样的:(假设vuex里state对象储存了一个叫keyword的变量,然后也定义好了相应的mutations和actions)
// 搜索组件中的搜索框:
<input v-model="keyword" @change="updateKeyword" />
// 搜索组件中更新全局状态
updateKeyword () {
this.$store.dispatch('DISPATCH_KEYWORD', this.keyword)
}
// 搜索结果视图中监听变量
watch: {
'$store.state.keyword' (value) {
search(value)
}
}
以上是举个例子说明这种逻辑,具体实现可以根据自己的需求来。
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答4.8k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
4 回答1.9k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
根据大家提供的方法和自己的实践,总结一下最后的结果
我在web_searchInfo(即搜索结果页面),采用 beforeRouteUpdate 的 方法
这里getSearchInfo是封装好了请求结果的方法,该方法,vue官网,vue-router中有讲,附上文档地址
https://router.vuejs.org/zh/g...
另外感谢几位其他大佬提供的watch解决方案,目前处于学习阶段,本次尚未使用的watch方法,会在以后尝试使用,如果其他人有类似问题,也可尝试使用,最后谢谢各位大佬提供帮助
还有忘记补充了,getSearchInfo()中,封装的api方法和参数获取如下(其实就用route获取就可以)