vue动态加载页面组件

问题说明

在开发时遇到一个问题:在同一个页面,局部页面要根据下拉框的选项来动态加载不同的页面。
参考

1.Vue 下拉框代码

<el-form-item label="合约分类" prop="feeContractType">
        <el-select v-model="contractList.contractTypeCode" placeholder="请选择所属合约分类" 		clearable size="small" @change="ct_selectChanged">
          <el-option v-for="item in contractList" :key="item.contractTypeId" :label="item.contractTypeName" :value="{id: item.contractTypeId, path: item.contractTypePath}"></el-option>
        </el-select>
</el-form-item>

其中item.contractTypePath 是存储在数据库中的路径 components/ContractTemplate/muban1
下拉框选择模板1,模板2的时候,部分页面加载模板页面

2.设置页面组件

 <component ref="detail" :is="contractComponent" ></component>

3.方法

ct_selectChanged(value) {
      let path = value.path;     
      return this.contractComponent = (resolve) => require([`@/views/${path}`], resolve)
}

上述代码中的require中的符号 “`” 不是单引号,而是esc按键下面的那颗按键

4.完整代码

<template>
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
      <el-form-item label="合约分类" prop="feeContractType">
        <el-select v-model="contractList.contractTypeCode" placeholder="请选择所属合约分类" clearable size="small" @change="ct_selectChanged">
          <el-option v-for="item in contractList" :key="item.contractTypeId" :label="item.contractTypeName" :value="{id: item.contractTypeId, path: item.contractTypePath}"></el-option>
        </el-select>
      </el-form-item>
    </el-form>
    <component ref="detail" :is="contractComponent" ></component>
  </div>
</template>
<script>
import { listActiveContractType } from "@/api/system/contractType";
export default {
  name: "ContractTemplate",
  data() {
    return {
      //笼罩层
      loading: true,
      // 显示搜索条件
      showSearch: true,
      // 查询参数
      queryParams: {
        contractTypeStatus: 0
      },
      // 表单参数
      form: {},
      // 表单校验
      rules: {
      },
      contractList: [],
      contractComponent: null,
    };
  },
  created() {
    this.getContractType();

  },
  methods: {
    ct_selectChanged(value) {
      let path = value.path;
      return this.contractComponent = (resolve) => require([`@/views/${path}`], resolve)
    },

    /** 得到分类列表 */
    getContractType(){
      listActiveContractType(this.queryParams).then(response =>{
        this.contractList = response.rows;
        console.log(response.rows)
      })
    },
  }
};
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值