Vue加载组件、动态加载组件的几种方式

当使用Vue框架进行开发时,可能会遇到需要动态加载组件的情况。Vue框架提供了一些方式来满足这种需求。

加载组件的几种方式

1. 直接注册组件

Vue框架提供了全局注册和局部注册两种方式。

1.1 全局注册方式

在全局注册中,通过 Vue.component() 方法注册组件。这种方式适用于组件会在项目的不同位置多次使用。

// 定义组件: todo-list.vue
<template>
  <ul>
    <li v-for="(todo, index) in todos" :key="index">
      {{ todo }}
    </li>
  </ul>
</template>

<script>
  export default {
    // 接收父组件传递的属性值
    props: ['todos']
  }
</script>

// 在应用中进行全局注册
import Vue from 'vue'
import TodoList from './components/todo-list.vue'

Vue.component('todo-list', TodoList)

全局注册后,在任何组件的 template 标签中都可以直接通过 "" 标签使用该组件。

1.2 局部注册方式

如果组件仅在某个组件内使用,那么可以使用局部注册的方式,不需要进行全局注册。

// 定义组件: todo-list.vue
<template>
  <ul>
    <li v-for="(todo, index) in todos" :key="index">
      {{ todo }}
    </li>
  </ul>
</template>

<script>
  export default {
    // 接收父组件传递的属性值
    props: ['todos']
  }
</script>

// 在应用中进行局部注册
import TodoList from './components/todo-list.vue'

export default {
  components: {
    'todo-list': TodoList
  }
}
2. 动态加载组件

有时候我们需要根据运行时的条件来动态加载组件。可以通过 Vue 的异步组件和Webpack的代码分割功能来实现动态加载。

2.1 异步组件

Vue框架支持使用 import() 函数来异步加载组件。

例如,有一个App.vue组件,在该组件需要动态引入Child1.vue和Child2.vue两个子组件。

<template>
    <div>
        <component :is="currentComp" />
        <button @click="changeChild">Click to change child component</button>
    </div>
</template>

<script>
import Child1 from './components/Child1.vue'
import Child2 from './components/Child2.vue'

export default {
    components: {
        Child1,
    },
    data () {
        return {
            currentComp: 'Child1'
        }
    },
    methods: {
        changeChild() {
            this.currentComp = this.currentComp === 'Child1' ? 'Child2' : 'Child1'
        }
    }
}
</script>

这里的 component 标签是用来加载动态组件的,另外在 data 中定义了一个 currentComp 变量,用来控制当前加载组件的值。

在Webpack编译时,将会把Child1.vueChild2.vue 编译成单独的JS文件。 在实际需要使用时,可以通过 import() 方法异步加载文件。

<template>
    <div>
        <component :is="currentComp" />
        <button @click="changeChild">Click to change child component</button>
    </div>
</template>

<script>
export default {
    data () {
        return {
            currentComp: 'Child1'
        }
    },
    methods: {
        changeChild () {
            if (this.currentComp === 'Child1') {
                import('./components/Child2.vue').then(child => {
                    this.currentComp = child.default
                })
            } else {
                import('./components/Child1.vue').then(child => {
                    this.currentComp = child.default
                })
            }
        }
    }
}
</script>

这里通过 import() 方法异步加载 Child1.vueChild2.vue 组件,并根据当前的 currentComp 值来进行切换。

3. Vue内置异步组件

Vue框架提供了一种更简单的方式来实现异步组件,就是使用 <async-component> 标签,该标签会自动进行异步加载。

首先,需要安装 vue-async-component 插件。

npm install vue-async-component

安装后,在项目中就可以使用 <async-component> 标签进行动态加载组件。

例如,有一个App.vue组件,在该组件需要动态引入Child1.vue和Child2.vue两个子组件。

<template>
    <div>
        <async-component :name="currentComp" :load="loadComp"/>
        <button @click="changeChild">Click to change child component</button>
    </div>
</template>

<script>
import Child1 from './components/Child1.vue'
import Child2 from './components/Child2.vue'
import VueAsyncComponent from 'vue-async-component'

export default {
    components: {
        Child1,
        Child2,
        asyncComponent: VueAsyncComponent
    },
    data () {
        return {
            currentComp: 'Child1'
        }
    },
    methods: {
        loadComp (name, cb) {
            if (name === 'Child1') {
                cb(Child1)
            } else {
                cb(Child2)
            }
        },
        changeChild () {
            this.currentComp = this.currentComp === 'Child1' ? 'Child2' : 'Child1'
        }
    }
}
</script>

这里动态加载时使用了 VueAsyncComponent 插件,<async-component> 标签就是该插件提供的。在组件加载时,会根据名称触发 loadComp 方法,实现异步加载。在这个示例中,将加载 Child1.vueChild2.vue 组件,并根据当前的 currentComp 值来进行切换。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue加载组件、动态加载组件的几种方式 - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • vue3.0 vue.config.js 配置基础的路径问题

    配置Vue.js项目的构建后的静态文件的发布路径是非常必要的。在Vue.js 3.0中,配置静态资源的发布路径的方式有所改变。本文将提供Vue.js 3.0中的vue.config.js配置多个基础路径的示例说明。 创建Vue.js 3.0项目 使用Vue CLI 3创建Vue.js 3.0项目: $ vue create my-project vue.co…

    Vue 2023年5月28日
    00
  • Vue-CLI3.x 自动部署项目至服务器的方法步骤

    Vue-CLI3.x 自动部署项目至服务器的方法步骤 Vue-CLI3.x 是一个官方发布的 Vue.js 项目脚手架工具,它能够快速创建一个基于 Vue.js 的项目,并提供了非常方便的开发工具。在使用 Vue-CLI3.x 进行开发过程中,为了能够让我们的项目能够在服务器上运行,需要对项目进行自动部署。本文将为大家介绍基于 Git、NodeJS、PM2 …

    Vue 2023年5月28日
    00
  • vue2.0 自定义组件的方法(vue组件的封装)

    下面我将详细讲解“vue2.0 自定义组件的方法(vue组件的封装)”的完整攻略。 1. vue组件的封装 Vue是一个组件化开发的框架,在实际开发中,我们常常需要将一些通用的功能封装成组件,以方便复用。Vue中封装组件的方法主要有两种: 全局组件:在Vue的实例中注册一个全局组件,可以在全局范围内使用; 局部组件:在Vue组件中定义局部组件,只能在该组件内…

    Vue 2023年5月27日
    00
  • vue插件mescroll.js实现移动端上拉加载和下拉刷新

    这里是一份详细的攻略,帮助您了解如何使用vue插件mescroll.js实现移动端上拉加载和下拉刷新。 什么是mescroll.js? Mescroll.js是一个用于移动端网站的下拉刷新和上拉加载更多的库,它简单易用,功能强大,并且完全兼容Vue.js。使用Mescroll.js,可以轻松实现移动端网站的下拉刷新和上拉加载更多功能。 安装mescroll.…

    Vue 2023年5月27日
    00
  • vue深度优先遍历多层数组对象方式(相当于多棵树、三级树)

    如何进行vue深度优先遍历多层数组对象方式 (相当于多棵树、三级树)?下面我们将提供一份完整的攻略。 首先需要明确的是,在vue中,深度遍历多层对象和树的方法都是使用递归的方式完成。以下是深度遍历多层对象的一般实现方法: function deepTraversal(obj, callback) { for (let key in obj) { if (ob…

    Vue 2023年5月27日
    00
  • vue3.0如何使用computed来获取vuex里数据

    下面是一份Vue3.0如何使用computed来获取Vuex里数据的攻略: 1. 简介 在使用Vue的过程中,经常遇到需要自动计算属性的情况,而Vuex作为Vue的全局状态管理工具,也经常用于存储应用程序的状态。在Vue3.0及以上版本中,可以使用computed选项来获取Vuex里的数据,并自动计算属性,非常方便。下面将为大家详细介绍vue3.0如何使用c…

    Vue 2023年5月28日
    00
  • vue如何使用文件流进行下载(new Blob)

    Vue可以使用File API和Blob对象实现文件下载功能。Blob对象表示二进制大对象,可以将文件数据打包为Uint8Array数组或字符串,从而实现文件下载。 以下是使用Blob对象进行文件下载的步骤: 创建Blob对象 可以使用Blob构造函数创建Blob对象,该构造函数接受一个数组、字符串或HTML元素作为参数。例如,传入Uint8Array数组作…

    Vue 2023年5月28日
    00
  • vue.js入门教程之计算属性

    下面是关于“vue.js入门教程之计算属性”的完整攻略: 什么是计算属性 计算属性是Vue.js的一个重要特性,它能够对绑定的数据进行计算,然后返回一个新的值。 Vue.js官网对计算属性的介绍: 计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。这就意味着只要message没有发生改变,多次访问计算属性vm.rever…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部