vue项目路由跳转和防止动态路由组件复用
标签实现新窗口打开
官方文档中说 v-link 指令被 组件指令替代,且 不支持 target=“_blank” 属性,如果需要打开一个新窗口必须要用标签,但事实上vue2版本的 是支持 target=“_blank” 属性的(tag=“a”),如下:
// An highlighted block
<router-link target="_blank" :to="{path:'/home',query:{id:'1'}}">新页面打开home页</router-link>
编程式导航
有些时候需要在单击事件或者在函数中实现页面跳转,那么可以借助router的示例方法,通过编写代码实现。我们常用的是 $router.push 和 r o u t e r . g o 但是 v u e 2.0 以后,这种方式就不支持新窗口打开的属性了,这个时候就需要使用 t h i s . router.go 但是vue2.0以后,这种方式就不支持新窗口打开的属性了,这个时候就需要使用this. router.go但是vue2.0以后,这种方式就不支持新窗口打开的属性了,这个时候就需要使用this.router.resolve,如下:
// An highlighted block
seeShare(){
let routeUrl = this.$router.resolve({
path: "/share",
query: {id:96}
});
//let routeUrl = this.$router.resolve(`/share/${96}`)
window.open(routeUrl.href, '_blank');
}
完整代码
有些时候需要在单击事件或者在函数中实现页面跳转,那么可以借助router的示例方法,通过编写代码实现。我们常用的是 $router.push 和 r o u t e r . g o 但是 v u e 2.0 以后,这种方式就不支持新窗口打开的属性了,这个时候就需要使用 t h i s . router.go 但是vue2.0以后,这种方式就不支持新窗口打开的属性了,这个时候就需要使用this. router.go但是vue2.0以后,这种方式就不支持新窗口打开的属性了,这个时候就需要使用this.router.resolve,如下:
<div class="c-p" @click="openWin('companiesNumber')">
<span>更多</span>
</div>
}
openWin(name) {
let routeData = this.$router.resolve({
name,
query: {
industryChainId: this.searchData.industryChainId
}
});
window.open(routeData.href, "_blank");
},
this.$router.push({name: ‘abc’})
防止动态路由组件复用
从detail/1导航到detail/2,原来的组件实例会被复用。因为两个路由都渲染同一组件,比起销毁再创建,复用则显得更加高效。不过,这也意味着组件的生命周期钩子不会再被调用,即页面第二次加载时钩子函数将失效。那么,当复用组件时,想对路由参数做出响应的话,需要在watch对象内添加对$route对象变化的跟踪函数:
即from detail/1 to detail/2
同时vue-router使用path to regexp作为路由路径引擎,给参数添加匹配模式。
下面是一个只传递数字的正则,正则需要放在括号中
{
path: '/detail/:id(\\d+)',
name: 'Detail',
component: Detail
}
链接: https://www.cnblogs.com/yjiangling/p/13640043.html.
链接: https://www.jb51.net/article/147801.htm.
链接: https://www.freesion.com/article/7160800696/.