共计 2523 个字符,预计需要花费 7 分钟才能阅读完成。
Vue Router 传参方式:
1. this.$router.push({name: ‘ 模块名称 ’, params: { // 各参数} })
router.js:
export default new Router({
routes: [
{
path: '/paramsPassingByRouter',
component: ParamsPassingByRouter,
children: [
{
path: 'paramsMode',
name: 'paramsMode',
component: ParamsMode
}
]
}
]
})
ParamsPassingByRouter.vue:
<!-- html -->
<button @click="paramsMode(testData)">params 传参 </button>
<!-- js -->
<script>
export default {data () {
return {
testData: {
id: '20180101',
name: '张三',
aka: 'z3',
age: '18'
}
}
},
methods: {paramsMode (data) {
this.$router.push({
name: 'paramsMode',
params: this.testData
})
}
}
}
</script>
ParamsMode.vue:
<!-- html -->
<div class="params-mode">{{testData}}</div>
<!-- js -->
<script>
export default {data () {
return {testData: {}
}
},
created () {this.testData = this.$route.params}
}
</script>
效果:
url:http://localhost:8081/#/paramsPassingByRouter/paramsMode
页面显示:{“id”:”20180101″,”name”:” 张三 ”,”aka”:”z3″,”age”:”18″}
但是刷新页面后,数据会丢失,显示:{}。
2. this.$router.push({name: ‘ 模块名称 ’, query: { // 各参数} })
router.js:
export default new Router({
routes: [
{
path: '/paramsPassingByRouter',
component: ParamsPassingByRouter,
children: [
{
path: 'queryMode',
name: 'queryMode',
component: QueryMode
}
]
}
]
})
ParamsPassingByRouter.vue:
<!-- html -->
<button @click="queryMode(testData)">query 传参 </button>
<!-- js -->
<script>
export default {data () {
return {
testData: {
id: '20180101',
name: '张三',
aka: 'z3',
age: '18'
}
}
},
methods: {queryMode (data) {
this.$router.push({
name: 'paramsMode',
query: this.testData
})
}
}
}
</script>
QueryMode.vue:
<!-- html -->
<div class="query-mode">{{testData}}</div>
<!-- js -->
<script>
export default {data () {
return {testData: {}
}
},
created () {this.testData = this.$route.query}
}
</script>
效果:
url:http://localhost:8081/#/paramsPassingByRouter/queryMode?id=20180101&name=%E5%BC%A0%E4%B8%89&aka=z3&age=18
页面显示:{“id”:”20180101″,”name”:” 张三 ”,”aka”:”z3″,”age”:”18″}
刷新页面后,数据不会丢失。
解决刷新页面数据丢失的方案:
-
使用
this.$router.push({name: '模块名称', query: { // 各参数} })
方式传参。缺点:参数值都拼接在 url 上,url 会很长,同时都可被看到。
-
this.$router.push({name: '模块名称', params: { // 各参数} })
路由文件设置的时候把参数拼到 url 里。url:http://localhost:8081/#/paramsPassingByRouter/paramsMode/20180101/%E5%BC%A0%E4%B8%89/z3/18
缺点:同上。 -
老老实实的用 localStorage 存储。
url: http://localhost:8081/#/paramsPassingByRouter/paramsMode/z3
可以和 params 方式配合使用,可以暴露的参数显示在 url 上,同时刷新参数也不会丢失。// router.js { path: 'paramsMode/:aka', name: 'paramsMode', component: ParamsMode } <!-- ParamsMode.vue 修改 --> <script> export default {data () { return {testData: {} } }, created () {const tempData = localStorage.getItem('tempData') if (tempData) {this.testData = JSON.parse(tempData) } else { this.testData = this.$route.params localStorage.setItem('tempData', JSON.stringify(this.$route.params)) } }, beforeDestroy () {localStorage.removeItem('tempData') } } </script>