如何使用component和tab选项卡组件,实现做到显示多个同一个组件的实例?
用类似tab的组件搭配vue的component标签动态显示多个组件的内容。其中要求,能对特定的组件,能加载多个,传递不同参数进行显示。
我写了代码进行效果实现,但没达到我想要的效果。以下是一些代码和测试效果结果
app.vue:
<template>    <div >
    <h1>测试</h1>
    <div>
      <el-radio-group v-model="radio1" @input="radio_onchange">
      <el-radio-button v-for="(item,index) in page_list" :key="index" :label="item.view_code">{{item.label}}</el-radio-button>
    </el-radio-group>
    </div>
   <div>
    <keep-alive>
      <component :is="radio1" :message="message" ></component>
    </keep-alive>
   </div>
  </div>
</template>
<script>
import Vue from "vue";
import Test1 from '@/testComponent/test1.vue';
import Test3 from '@/testComponent/test3.vue';
export default {
  data(){
    return {
      test:"123",
      radio1:"a1",
      message:undefined,
      page_list:[
        {seq:1,view_code:"a1",label:"测试1",type:1},
        {seq:3,view_code:"b0",label:"特定测试组件A",type:2,message:"参数777",is_regist:false},
        {seq:4,view_code:"bc",label:"特定测试组件B",type:2,message:"参数666",is_regist:false},
      ],
    }
  },
components: {
    a1: Test1,
  },
  methods:{
    radio_onchange(value){
       var item=this.page_list.find((item) => item.view_code=== value);
       if(item.type!=2){
        return;
       }
       if(item.is_regist==false){
        Vue.component(item.view_code,Test3);
        this.message=item.message;
        item.is_regist=true;
       }
    }
  }
}
</script>
test.vue1
<template> <div>
    First name: <input type="text" name="FirstName" value="111"><br>
Last name: <input type="text" name="LastName" value="222"><br>
    测试:{{test}}
  </div>
</template>
<script>
export default {
  data(){
    return {
      test:"123",
    }
  },
}
</script>
test3.vue
<template>    <div>
        First name: <input type="text" name="FirstName" value="555"><br>
        Last name: <input type="text" name="LastName" value="666"><br>
       参数内容:{{message}}
     </div>
   </template>
   <script>
   export default {
        props:[
            'message'
        ],
   }
   </script>
测试效果
以上测试效果图,没有达到我的期待的实现效果
我期待的要求实现在表现上是这样,比如选择“测试特定组件A”,加载一个test3.vue实例,在里面的输入框输入333,然后选择“测试特定组件B”,加载一个test3.vue实例,在里面的输入框输入666。在选择“测试特定组件A”,“测试特定组件A”下的输入框里还能看到之前输入的333,再选择“测试特定组件B”,显示的输入框里有之前输入的666。
测试效果图表现的,在选择“特定测试组件A”之后,在选择“特定测试组件B”,会发现文本框没有什么变化,只有参数发生了改变。也就是说一开始选择“特定测试组件A”,component只创建了一次test3.vue的实例,然后选择“特定测试组件B”,并没有再次加载新的test3.vue实例,而是直接使用一开始选择“特定测试组件A”创建的test3.vue的实例,只有参数发送了改变。这说明“特定测试组件A”和“特定测试组件B”对应的test3.vue实例是同一个。
如何达到我期待的实现效果?即“特定测试组件A”和“特定测试组件B”对应的test3.vue实例不是同一个,而是各单独对应的?
回答:
在 <component> 元素外套一层 <keep-alive> 即可(记得添加 key 键)
以上是 如何使用component和tab选项卡组件,实现做到显示多个同一个组件的实例? 的全部内容, 来源链接: utcz.com/p/933585.html

