0
点赞
收藏
分享

微信扫一扫

【vue学习】router-view

A. 一个页面使用多个router-view显示不同的内容

访问首页:localhost:8010

点击Helloworld

B. 路由嵌套和router-view

访问首页:localhost:8080

点击Helloworldfoo,右边棕色部分会替换组件

C. router-viewkey属性

Different router the same component vue 真实的业务场景中,这种情况很多。如:

创建编辑的页面使用的是同一个 component,默认情况下这两个页面切换时并不会触发 vuecreated 或者 mounted 钩子,官方说你可以通过 watch $route 的变化来进行处理,但说真的还是蛮麻烦的。后来发现其实可以简单的在 router-view 上加上一个唯一的key,来保证路由切换时都会重新渲染触发钩子了。这样简单的多了。

<router-view :key="key"></router-view>
<!--
<router-view :key="$route.path"></router-view>
-->
computed: {
  key() {
    // 只要保证 key 唯一性就可以了,保证不同页面的 key 不相同
    return this.$route.fullPath
  }
 }

D. router-view & keep-alive

<!--
在这里keep-alive配合了router-view使用,
keep-alive本身是vue2.0的功能,并不是vue-router的,
所以在vue1.0版本是不支持的。
 -->
<template>
  <div>
    <keep-alive>
      <router-view></router-view>
    </keep-alive>
  </div>
</template>


<!-- 不过一般这样写, 根据参数配置 -->

<!-- 老版本 -->
<keep-alive>
      <router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>

<!-- 新版本:exclude & include-->
<keep-alive>
      <router-view exclude="detail"></router-view>
</keep-alive>

不生效案例:
网上有很多其他的情况导致的缓存不生效,这里不多阐述。如:项目中存在多个<router-view>标签,并且其中存在嵌套。那么在外层的<router-view>上加<keep-alive>标签会导致组件初始化两次,第二次初始化并没有进行缓存。所以将<keep-alive>移到内层的<router-view>上。

举报

相关推荐

0 条评论