- 需求:使用vue不刷新页面不使用ajax,改变url地址并显示局部页面
- 实现方式:通过router-link查询字符串方式或path方式实现
如何传参 (How to pass the reference)
html:
<div id="app"></div>
javascript:
Vue.use(VueRouter);
var Login = {
template: `<div>登录界面</div>`,
created: function () {
// 查看该组件创建完毕传来的url值
// console.log(this.$route.query)
}
}
var Register = {
template: `<div>注册界面</div>`,
created: function () {
// 查看该组件创建完毕传来的url值
// console.log(this.$route.params)
}
}
var router = new VueRouter({
// 这里可以直接传 也可以不传
// 4. 配置路由对象
routes: [
{ name: "login", path: "/login", component: Login },
// 注意这里的 /:name
{ name: "register", path: "/register/:name", component: Register }
] //login 是一个组件对象
});
var App = {
template: `
<div>
<router-link :to="{name:'login', query:{id:1}}">点我登录</router-link>
<router-link :to="{name:'register', params:{name:'abc'}}">点我注册</router-link>
<router-view></router-view>
</div>
`
}
new Vue({
el: '#app',
router: router, // 将配置好的路由对象关联到vue实例中
components: {
app: App
},
template: `<app />`,
})
查询字符串方式:在router-link中的to里面写上query:{id:1}
例:
<router-link :to="{name:'login', query:{id:1}}">点我登录</router-link>
使用查询字符串方式传参,id值会在url中以?id=1的方式添加到末尾
path方式:在router-link的to里面写上params:{name:’abc’}
例:
<router-link :to="{name:'register', params:{name:'abc'}}">点我注册</router-link>
使用path传参方式,params对象的属性需要在路由配置里面即routes中补上形参,如:
{ name: "register", path: "/register/:name", component: Register }
这时候params的name才会匹配上对应的link实现url地址的改变
如何获取传参值 (How to get url pass value)
在对应的模块中,使用this.$route.query或this.$route.params即可获取url实参
- 如果是查询字符串方式,则用query
- 如果是path方式,则用params 例如:
var Login = {
template: `<div>登录界面</div>`,
created: function () {
console.log(this.$route.query)
// {id:1}
}
}
var Register = {
template: `<div>注册界面</div>`,
created: function () {
console.log(this.$route.params)
// {name:"abc"}
}
}