我们都知道vue-router的动态路由匹配对组件是原地复用的策略,需要我们在组件中根据不同的美元<代码>路径> 代码参数展示不同的数据,这在大部分情景下是很高效的做法,但这无疑增加了组件的复杂度,而且不同参数间切换因为是同组件复用,切换效果不加修饰的话会显得很生硬,这里放一张图片感受一下。
如果我们希望能够每个动态参数都能渲染出一个组件而不是去复用怎么办呢?
我这里提供一个简便的方案
通常动态路由我们都是用来处理详情页
const路由器=new VueRouter ({ 路线:[//动态路径参数以冒号开的头 {路径:/user/: id,组件:用户、道具:真正的} ] })
<代码> User.vue 代码>
& lt; template> & lt; div> {{user.name}} & lt;/div> & lt;/template> & lt; script> 出口默认{ 名称:“用户”, 道具:“id”, 数据(){ 返回{数据:{}}; }, 看:{ id (id) { this.getUser (id); }, }, 计算:{ 用户(){ 返回this.data(这一点。id] | |{名称:"}; }, }, 方法:{ getUser (id) { setTimeout(()=比;{//假装异步 这一点。数据(id)={id、名称:“张”+ id}; }, 1000); }, }, 安装(){ this.getUser (this.id); }, }; & lt;/script>
我们可以发现基本上这样的组件是围绕着<代码>路径参数> 代码即例子中的<代码> id> 代码做处理和渲染,只要我们能提取到这个<代码>路径参数> 代码,并维护成列的表,通过这个列表来渲染实际组件,然后通过<代码> v-show> 代码显示当前<代码>路径参数> 代码下的组件,就可以实现不同参数不同组件的效果了。
简单的来个例子
& lt; template> & lt; div> & lt;用户 v代表=癷dList _id” v-show=" _id===id” :id=癬id” :关键=" _id "/比; & lt;/div> & lt;/template> & lt; script> 从“进口用户。/User.vue '; 出口默认{ 名称:“UserPage”, 组件:{ 用户, }, 道具:“id”, 数据(){ 返回{ idList:(this.id), }; }, 看:{ id (id) { 如果(! this.idList.includes (id)) this.idList.push (id); }, }, }; & lt;/script>
然后把这个组件作为<代码>路由器> 代码组件
{路径:/user/: id,组件:UserPage,道具:真正}
现在我们完成解耦,同路由组件间参数转变切换的是真实组件了,这里再放一张图片感受一下。
这个方案说明白了很简单,但还是有一些细节要注意处理,比如记录不同参数页面的滚动条高度,比如怎么处理子页面关闭等等,我的开源项目<代码> e-admin> 代码提供的<代码> ea-view> 代码组件对这个解决方案做了完整的细节处理,有兴趣的话可以参考一下ea-view。
我正在造一个基于<代码> element-ui> 代码的中后台框架轮子e-admin欢迎星
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。