Vue中的动态渲染

介入一个中间组件动态渲染,根据接口返回变量type 对应查找当前组件为什么组件如:

 接口返回:
 		data = [
 			{ type:1,name:'分类组件'},
 			{ type:5,name:'标签组件'},
 			{ type:6,name:'标题组件'},
 			{ type:2,name:'Icon组件'},
 		 ]
页面渲染结果就为:
		   我是分类组件
		   我是标签组件
		   我是标题组件
		   我是Icon组件
<template>
    <transtion :data="data" />
</template>

<script>
import transtion from "./transtion";
export default {
  components: {
    transtion,
  },
  data() {
    return {
      data: {
        result: {},
        elementTypeList: [
          // 组建类型映射 1:分类TAB、2:ICON、3:图片导航、4:特价福利、5:标签TAB、6:标题 、7:空白占位 、8:商品组件
          "",
          "cate",
          "icon",
          "banner",
          "hotsale",
          "tabs",
          "title",
          "placeholder",
          "goods"
        ]
      },
    };
  },

  created() {
   	this.initData();
  },
  methods: {
    async initData() {
      let  res =  = [
 			{ type:1,name:'分类组件'},
 			{ type:5,name:'标签组件'},
 			{ type:6,name:'标题组件'},
 			{ type:2,name:'Icon组件'},
 		 ]
      this.data.result = res;
     }
};
</script>
<template>
    <h1>我是{data.name}</h1>
</template>

<script>
export default {
  props: {
    data: {
      type: Object,
      default() {
        return {};
      }
    }
  },
};
</script>

借助vue render函数动态渲染


<script>
import cate from "./subpage/cate/cate";
import icon from "./subpage/icon/icon";
import banner from "./subpage/banner/banner";
import hotsale from "./subpage/hotsale/hotsale";
import goods from "./subpage/goods/goods";
import tabs from "./subpage/tabs/tabs";
import list from "./subpage/list/index";
import title from "./subpage/title/title";
import placeholder from "./subpage/placeholder/placeholder";
// 映射变量 //1:分类TAB、2:ICON、3:图片导航、4:特价福利、5:标签TAB、6:标题 、7:空白占位 、8:商品组件
const CommentsMap = {
  cate: cate,
  icon: icon,
  banner: banner,
  hotsale: hotsale,
  goods: goods,
  tabs: tabs,
  list: list,
  title,
  placeholder: placeholder,
};


export default {
  functional: true,
  render(h, ctx) {
    let data = ctx.props.data;
    let elementTypeList = data.elementTypeList;
    return h(
      "div",
      {
        class: "dynamicClass"
      },
        data.result.map(item => {
          return h(CommentsMap[elementTypeList[item.type]], {
            props: {
              data:item,
            },
          });
        })
    );
  },
  
};
</script>
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值