VUE组件--动态组件、组件保持存活、异步组件

这篇具有很好参考价值的文章主要介绍了VUE组件--动态组件、组件保持存活、异步组件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

动态组件

有些场景可能会需要在多个组件之间进行来回切换,在vue中则使用<component :is="..."> 来实现组件间的来回切换

// App.vue
<template>
    <component :is="tabComponent"></component>
    <button @click="changeHandler">切换组件</button>
</template>

<script >
    import Component1 from './components/Component1.vue'
    import Component2 from './components/Component2.vue'
    export default {
        data(){
            return{
                tabComponent:"Component1"
            }
        },
        methods:{
            changeHandler(){
                this.tabComponent = this.tabComponent == "Component1" ? "Component2" : "Component1"
                console.log(this.tabComponent)
            }
        },
        components:{
            Component1,
            Component2
        }
    }
</script>

 changeHandler()使用三目运算符,来实现Component1和Component2之间的相互切换

// Component1.vue
<template>
    <h2>组件1</h2>
</template>
//Component2.vue
<template>
    <h2>组件2</h2>
</template>

 默认为组件1

 VUE组件--动态组件、组件保持存活、异步组件,VUE,vue.js,前端,javascript

VUE组件--动态组件、组件保持存活、异步组件,VUE,vue.js,前端,javascript

组件保持存活

当组件1切换到组件2时,组件1会被强行销毁

// App.vue
<!--html代码(模块展示 显示在页面上的内容)-->
<template>

    <component :is="tabComponent"></component>

    <button @click="changeHandler">切换组件</button>

</template>

<!--vue代码-->
<script >
    import Component1 from './components/Component1.vue'
    import Component2 from './components/Component2.vue'
    export default {
        data(){
            return{
                tabComponent:"Component1"
            }
        },
        methods:{
            changeHandler(){
                this.tabComponent = this.tabComponent == "Component1" ? "Component2" : "Component1"
                console.log("切换至组件:")
                console.log(this.tabComponent)
            }
        },
        components:{
            Component1,
            Component2
        }
    }
</script>
// Component1.vue
<template>
    <h2>组件1</h2>
    <p>{{ msg }}</p>
    <button @click="updateHandler">更新数据</button>
</template>
<script>
    export default {
        data(){
            return {
                msg: "老数据"
            }
        },
        methods:{
            updateHandler(){
                this.msg = "新数据"
            }
        },
        beforeUnmount() {
            console.log("组件1被销毁前")
        },
        unmounted() {
            console.log("组件1被销毁")
        }
    }
</script>
// Component2.vue
<template>
    <h2>组件2</h2>
</template>
<script>
    export default {
        beforeUnmount() {
            console.log("组件2被销毁前")
        },
        unmounted() {
            console.log("组件2被销毁")
        }
    }
</script>

初始态: 

VUE组件--动态组件、组件保持存活、异步组件,VUE,vue.js,前端,javascript

点击“更新数据”:

VUE组件--动态组件、组件保持存活、异步组件,VUE,vue.js,前端,javascript

点击“切换组件”:

VUE组件--动态组件、组件保持存活、异步组件,VUE,vue.js,前端,javascript

再次点击“切换组件”:

VUE组件--动态组件、组件保持存活、异步组件,VUE,vue.js,前端,javascript

据上面的图可以发现在切换组件的过程中,更改过后的数据又变回老数据,则说明在组件的切换中,发生了组件的销毁及重建,若想要阻止切换组件时组件的销毁发生,可加上<keep-alive> (强制将被切换的组件使之仍然保持存活状态)

//App.vue 中的 template
<template>
    <keep-alive>
    <component :is="tabComponent"></component>
    </keep-alive>
    <button @click="changeHandler">切换组件</button>
</template>

 VUE组件--动态组件、组件保持存活、异步组件,VUE,vue.js,前端,javascript

VUE组件--动态组件、组件保持存活、异步组件,VUE,vue.js,前端,javascript

VUE组件--动态组件、组件保持存活、异步组件,VUE,vue.js,前端,javascript

 此时,在组件切换的过程中,组件不再被销毁重建


异步组件

当有多个组件存在时,项目的运行时,组件默认会被同步加载

当组件过多时,采用同步加载组件会大大降低运行速度,所以vue提出了异步加载组件的方法:defineAsyncComponent 方法进行实现

VUE组件--动态组件、组件保持存活、异步组件,VUE,vue.js,前端,javascript

VUE组件--动态组件、组件保持存活、异步组件,VUE,vue.js,前端,javascript 实现组件的切换时,没有出现新的网络请求,则说明组件1和组件2一开始就已经被加载

将组件2的导入方式改为以下形式即可实现异步组件的加载:

// App.vue 中的<script>
import Component1 from './components/Component1.vue'
import {defineAsyncComponent} from "vue"
    const Component2 = defineAsyncComponent( () =>
        import("./components/Component2.vue")
    )

VUE组件--动态组件、组件保持存活、异步组件,VUE,vue.js,前端,javascript

VUE组件--动态组件、组件保持存活、异步组件,VUE,vue.js,前端,javascript

可以发现,此时出现了网络请求,说明Component2已实现了异步加载文章来源地址https://www.toymoban.com/news/detail-805104.html

到了这里,关于VUE组件--动态组件、组件保持存活、异步组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • VUE3+vite项目中动态引入组件和异步组件

    1. 把项目中所有vue文件注册成异步组件。 2. 获取组件 在setup函数获取组件 3. 参考如下 Glob 导入 Vite 支持使用特殊的 import.meta.glob 函数从文件系统导入多个模块: 以上将会被转译为下面的样子: 你可以遍历 modules 对象的 key 值来访问相应的模块: 匹配到的文件默认是懒加载的

    2024年02月10日
    浏览(105)
  • vue前端性能优化之分包策略、异步组件、Gzip压缩

    目录 一、Gzip压缩 二、异步组件 三、分包策略 最后           项目的性能优化是有完整项目经历的开发者都会遇到得一个问题。这是整个项目开发最后的一步,也是最关键的一步,做一个项目并不是单单完成功能就算结束了,作为开发者,更要站在用户角度去进行项目体

    2024年02月09日
    浏览(51)
  • vue前端开发自学,异步加载组件,提升用户端的客户体验度

    vue前端开发自学,异步加载组件,提升用户端的客户体验度!现实项目开发时,组件的数量非常庞大,如果都是一口气加载完,对手机用户来说,体验度会很差。因此,非常有必要使用异步加载。 那就是,用到了哪个组件,再去加载它就行了。用不到的时候,不加载它。下面看

    2024年01月16日
    浏览(47)
  • Vue3 —— 在vue中动态引入组件以及动态引入js的方法

    文章目录 一 、 动态引入组件 1. 具体写法 二、 动态引入js文件 1. 具体写法 总结 定义一个异步组件,它在运行时是懒加载的。参数可以是一个异步加载函数,或是对加载行为进行更具体定制的一个选项对象。 在大型项目中,我们可能需要拆分应用为更小的块,并仅在需要时

    2024年02月12日
    浏览(52)
  • vue前端开发自学基础,动态切换组件的显示

    vue前端开发自学基础,动态切换组件的显示!这个是需要借助于,一个官方提供的标签,名字叫【Component】-[代码demo:component :is=\\\"ComponetShow\\\"/component]。 下面看看代码详情。 以上是在app.vue里面写的,一个按钮,绑定点击事件,切换组件A,和组件B的显示。里面很明显,是调用了一

    2024年01月20日
    浏览(41)
  • vue - 动态绑定ref(使用变量)以及获取方式,解决v-for循环嵌套自定义子组件时无法this.$refs.xx找到动态组件的情况(详细示例教程)适合 vue.js nuxt.js uniapp

    正常情况,我们需要在vue中获得某个dom或者组件,我们会通过绑定 ref 然后通过绑定后的名字来获取这个dom 。 但是,如果我们在v-for中绑定ref的话,那么这个ref就会存在多个,比如我们点击事件让对应的显示/隐藏的话,我们很难找到这个对应的元素。 那么,这时我们需要动

    2024年02月13日
    浏览(53)
  • vue+iView 动态侧边栏菜单保持高亮选中

    iview 组件在使用过程中,多多少少有一些小坑,本文简单罗列一二: 避坑指南: 关于iview 侧边栏菜单未能展开高亮选中回显问题 应用场景:iview-admin下接入动态菜单后,刷新或链接跳入时回显失效 简单就是两个方面:动态菜单接入前和动态菜单接入后菜单保持高亮选中问题

    2024年02月07日
    浏览(38)
  • 【前端】在Vue2中使用Vanta.js炫酷动态背景(全屏背景)

    官网:https://www.vantajs.com/ 由于博主在参考官网及官方GitHub进行应用时遇到一些问题,因此写了该篇博客,以避免大家因找Bug而浪费时间,方便快速的应用。 注意版本 Vue的版本如下 “vue”: “^2.6.14” 渲染容器 导包 方法 完整代码: 完整代码: 参加颜色参数 如果报错:‘X

    2024年02月11日
    浏览(49)
  • 【庖丁解牛】vue-element-admin前端CRUD通用操作组件详解,对,核心就是crud.js文件

    vue-element-admin 框架之所以能够快速定制应用,得益于其通配的CRUD操作,属性配置多样化且个性化,能够满足绝大部分开发需求,也方便了代码生成。 可以深入学习重点源文件是: src/components/Crud/crud.js ,一共 863 行代码,以及下图中其它四个vue组件,形成了对通用CRUD操作的高

    2024年01月18日
    浏览(59)
  • Vue 的异步组件

    在项目中,有的组件仅在需要时才会加载,这时就需要用到异步组件。 异步组件本质上是一个函数 ,该函数调用后返回一个 Promise , Promise 成功的结果是一个 组件对象 。一般使用 import() 动态导入组件作为这个 Promise 。 异步组件也可以在组件中使用,比如某些场景下需要获

    2024年02月06日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包