vue组件动态插入、vue组件按需插入显示、vue组件动态显示

快来打我* 2023-06-06 03:57 57阅读 0赞

-——————————————————————————

qq群(vue学习交流):482739794

-——————————————————————————

先来说下项目需求:

  • 页面的组件不是直接引入且按照顺序放在页面上的,
  • 而是根据后端返回的数据,来判断,动态的加载某个组件

思路步骤:

  • 引入组件

import TabNew from ‘./TabNew.vue’

  • 注册组件

components: {
‘v-TabNew-2’: TabNew

}

  • 插入组件

itemList.push({
component: ‘v-NewHomeAd-1’,
classname: ‘’,
vIf: adverArr ? true : false,
data: adverArr
})

  • 通过 :is 动态绑定组件

代码展示:

(常见的直接将组件按照位置放在页面上,一般我们都是这样写的)

  1. <template>
  2. <div id="home_new">
  3. <!-- 查询话费、流量 -->
  4. <v-TelePhoneBill />
  5. <!-- tabNew栏 -->
  6. <v-TabNew-2 class="tab_top" :tabNew='tabNewArr' v-if="tabNewArr" />
  7. <!-- 专区 -->
  8. <v-SpecialArea-3 class="special_top" :specialNew="specialArr" v-if="specialArr.length!=0" />
  9. <!-- 广告 -->
  10. <v-NewHomeAd :adver="adver" v-if="adverArr" />
  11. </div>
  12. </template>

(根据后端返回的值,动态的加载组件)

  1. <template>
  2. <div id="home_new">
  3. <component :is="item.component" v-if="item.vIf" :data="item.data" :class="item.classname" v-for="(item,index) in itemList"
  4. :key="index"></component>
  5. </div>
  6. </template>
  7. <script>
  8. // 引入需要的组件
  9. import TabNew from './TabNew.vue'
  10. import SpecialArea from './Card/SpecialArea'
  11. import TelePhoneBill from './TelePhoneBill'
  12. import NewHomeAd from './Advertise/NewHomeAd'
  13. export default {
  14. data() {
  15. return {
  16. current: "",
  17. msg: "",
  18. locationCity: '',
  19. // tabNewArr: '', // tabnew栏
  20. // specialArr: [], //专区
  21. cityLocation: '', // 选择地区
  22. // adverArr: '', // 广告
  23. cityTxt: '选择地区',
  24. currentCity: '', // 城市
  25. provinceCode: '', // 城市编码
  26. itemList: [],
  27. adList: ''
  28. }
  29. },
  30. // 注册组件
  31. components: {
  32. 'v-TabNew-2': TabNew,
  33. 'v-SpecialArea-3': SpecialArea,
  34. 'v-TelePhoneBill-4': TelePhoneBill,
  35. 'v-NewHomeAd-1': NewHomeAd
  36. },
  37. methods:{
  38. getData() {
  39. var that = this;
  40. var url = "/v1/index/getIndexPageInfo.do";
  41. var params = {
  42. provinceCode: that.cityLocation.id || that.provinceCode // 省份code 北京的
  43. };
  44. that.httpRequest(url, params)
  45. .then(res => {
  46. var res = res.data;
  47. console.log('====首页接口的success', res.success);
  48. if (res.success) {
  49. console.log("首页请求成功", res);
  50. // 专区
  51. let special1, special2, special3, specialArr1 = [],
  52. specialArr2 = [],
  53. specialArr3 = [],
  54. typeList = [],
  55. obj = {},
  56. itemList = [];
  57. for (var i in res.body) {
  58. obj[res.body[i][0].type] = i; // 设置对象,为了在switch后面用到索引
  59. console.log('设置的对象', obj);
  60. var item = res.body[i][0].type;
  61. switch (Number(item)) {
  62. case 1:
  63. console.log('111')
  64. let adverArr = res.body[item] // 广告
  65. // 动态插入组件
  66. itemList.push({
  67. component: 'v-NewHomeAd-1',
  68. classname: '',
  69. vIf: adverArr ? true : false,
  70. data: adverArr
  71. })
  72. break;
  73. case 2: // tab栏
  74. console.log('222')
  75. let tabNewArr = res.body[obj[item]] // tab栏显示
  76. itemList.push({
  77. component: 'v-TabNew-2',
  78. classname: 'tab_top',
  79. vIf: tabNewArr ? true : false,
  80. data: tabNewArr
  81. })
  82. break;
  83. case 3: // 专区
  84. console.log('333')
  85. special3 = res.body[item] // 携号转网
  86. special1 = res.body[item] // 宽带专区
  87. special2 = res.body[item] // 号卡专区
  88. //专区 得存在一个数组里面 specialArr
  89. special1.map((item) => {
  90. specialArr1.push(item)
  91. })
  92. special2.map((item) => {
  93. specialArr2.push(item)
  94. })
  95. special3.map((item) => {
  96. specialArr3.push(item)
  97. })
  98. let specialArr = [];
  99. specialArr.push(specialArr1, specialArr2, specialArr3)
  100. itemList.push({
  101. component: 'v-SpecialArea-3',
  102. classname: 'special_top',
  103. vIf: specialArr.length !== 0 ? true : false,
  104. data: specialArr
  105. })
  106. break;
  107. case 4: // 话费显示
  108. console.log('4444')
  109. // itemList.push({
  110. // component: 'v-TelePhoneBill-4',
  111. // classname: '',
  112. // vIf: true,
  113. // data: ''
  114. // })
  115. break;
  116. case 5:
  117. console.log('555')
  118. break;
  119. }
  120. }
  121. that.itemList = itemList;
  122. console.log('that.itemList', that.itemList);
  123. }
  124. })
  125. .catch(error => {
  126. console.log(error);
  127. });
  128. }
  129. }

vue动态组件官方文档

-————-完。

发表评论

表情:
评论列表 (有 0 条评论,57人围观)

还没有评论,来说两句吧...

相关阅读

    相关 vue

    组件(Component)是Vue.js最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。所有的 Vue 组件同时也都是 Vue 的实例,所以可接受相同的选项对

    相关 vue

    定义Vue组件 什么是组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件

    相关 Vue

    为什么使用组件 JavaScript能力的复用。Vue.js的组件提高重复性,让代码可以复用。 组件的用法 组件在使用前先需要注册。注册分为两种方式:全局注册和局

    相关 Vue

    Vue组件 1. 什么是组件 1. 组件的概念:组件即自定义控件,是Vue.js最强大的功能之一 2. 组件的用途:组件能够封装可重用代码,扩展html标签功能