美文网首页Vue
【vue学习】router-view

【vue学习】router-view

作者: 前端菜篮子 | 来源:发表于2019-12-30 09:25 被阅读0次

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

    a.png

    访问首页:localhost:8010

    image.png

    点击Helloworld

    image.png

    B. 路由嵌套和router-view

    image.png

    访问首页:localhost:8080

    image.png

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

    image.png

    C. router-viewkey属性

    该段内容来自: vue-element-admin

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

    image

    创建编辑的页面使用的是同一个 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

    为了让组件数据缓存,避免每次资源重复加载(如tab标签页切换页面时,每次点完一个,回头点之前的,就会重新加载,体验真的差),因此使用了keep-alive 【不知道这点和上述说的key不同会重新触发是否矛盾,待验证...】

    <!--
    在这里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>上。

    相关文章

      网友评论

        本文标题:【vue学习】router-view

        本文链接:https://www.haomeiwen.com/subject/qzaroctx.html