vue动态挂载组件

在一些特殊场景下,使用组件的时机无法确定,或者无法在vue的template中确定要我们要使用的组件,这时就需要动态的挂载组件,或者使用运行时编译动态创建组件并挂载。

今天我们将带大家从实际项目出发,看看在实际解决客户问题时,如何将组件进行动态挂载,并为大家展示一个完整的解决动态挂载问题的完整过程。

 v2写法

    import Vue from "vue";
    import ImagePreview from "@/components/ImagePreview"
    var Profile = Vue.extend(ImagePreview)
    const elementNode = document.createElement('div');
    document.body.append(elementNode);
    var test = new Profile({
      propsData: {
        src: 'http://192.168.43.100:8999/profile/upload/2022/12/08/小程序_20221208150231A001.jpg'
      }
    }).$mount(elementNode);

v3写法 

import { createApp } from 'vue';
import TipsMessage from './TipsMessage.vue';
type MessageType = 'success' | 'error' | 'defaults';

const createMessage = (message: string, type: MessageType, timeOut = 2000) => {
  const messageInstance = createApp(TipsMessage, {
    message,
    type
  })
  const elementNode = document.createElement('div');
  document.body.append(elementNode);
  messageInstance.mount(elementNode);
  setTimeout(() =>{
    messageInstance.unmount();
    document.body.removeChild(elementNode);
  }, timeOut)
}

export default createMessage

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue 3 动态挂载组件使用方式与 Vue 2 有些不同。具体实现步骤如下: 1. 创建多个组件,每个组件都需要指定一个 `name`,例如: ```vue <!-- ComponentA.vue --> <template> <div> <h1>Component A</h1> </div> </template> <script> export default { name: 'ComponentA' } </script> ``` ```vue <!-- ComponentB.vue --> <template> <div> <h1>Component B</h1> </div> </template> <script> export default { name: 'ComponentB' } </script> ``` 2. 在父组件使用 `teleport` 标签,并且使用 `v-if` 或者 `v-show` 来控制是否渲染组件,例如: ```vue <template> <div> <button @click="toggleComponent">Toggle Component</button> <teleport to="body"> <component v-bind:is="currentComponent" v-if="showComponent"></component> </teleport> </div> </template> <script> import { defineComponent, ref } from 'vue'; import ComponentA from './ComponentA.vue'; import ComponentB from './ComponentB.vue'; export default defineComponent({ name: 'ParentComponent', components: { ComponentA, ComponentB }, setup() { const currentComponent = ref('ComponentA'); const showComponent = ref(true); const toggleComponent = () => { currentComponent.value = currentComponent.value === 'ComponentA' ? 'ComponentB' : 'ComponentA'; } return { currentComponent, showComponent, toggleComponent } } }); ``` 在上面的例子,我们使用 `teleport` 标签来实现组件动态挂载。首先,我们在父组件引入了 `ComponentA` 和 `ComponentB` 两个子组件,并且使用 `v-bind:is` 属性来绑定当前需要渲染的组件的名字,然后使用 `v-if` 或者 `v-show` 来控制是否渲染该组件。我们还定义了一个 `toggleComponent` 方法,用于在两个子组件之间切换。当用户点击 `Toggle Component` 按钮,该方法会将 `currentComponent` 的值从 `ComponentA` 切换为 `ComponentB`,从而实现了动态挂载组件的效果。 需要注意的是,在 Vue 3 ,`v-if` 和 `v-show` 是不能直接用在 `component` 标签上的,需要使用 `teleport` 标签来实现。此外,Vue 3 使用了 `ref` 来定义响应式变量,而不再使用 Vue 2 的 `data` 属性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值