问答

vue不支持嵌套子组件的模板字符串编译吗?

作者:admin 2021-04-18 我要评论

经过反复测试排查,发现一个比较奇怪的现象:每逢一个列表,如果第一条数据是 非外部传值 的情况,就会报错. a 会报错: div class="overviewlist" label总数/label s...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

经过反复测试排查,发现一个比较奇怪的现象:每逢一个列表,如果第一条数据是非外部传值的情况,就会报错.

a 会报错:

<div class="overviewlist">
    <label>总数</label>
    <span>{{infoObj.totalNum}}</span>
</div>

b 不会报错:

<div class="overviewlist">
    <span>{{infoObj.totalNum}}</span>
    <label>总数</label>
</div>

c 会报错:(两个列表之间不影响)

 <div class="cn-left-summary">
        <div class="cn-title">
            <label>{{infoObj.title}}</label>     // 外传值,不报错
        </div>
        <div class="cn-content">
            <div class="overviewlist">
                <label>总数</label>               // 报错
                <span>{{infoObj.totalNum}}</span>
            </div>
            </div>
        </div>
    </div>

啥原因 ?

=========================================================================

以下是原问题:

因为要实现自由拖拽,所以将布局好vue页面转成字符串按支持拖拽的数据结构传给子组件.经指点已经实现了带插值表达式即{{}}的成功解析.但当我尝试传比较复杂的结构时,例如包含子组件的vue模板,就报错了.

问题出在哪里 ?

1.成功编译的vue页面:

转义前:

    <div class="cn-left-summary">
        <div class="cn-title">
            <label>{{infoObj.title}}</label>
        </div>
        <div class="cn-content">
            <div class="overviewlist">
                <label>总数</label>
                <span>{{infoObj.totalNum}}</span>
            </div>
            <div class="overviewlist">
                <label>运行</label>
                <span>{{infoObj.runingNum}}</span>
            </div>
            <div class="overviewlist">
                <label>停止</label>
                <span>{{infoObj.stopNum}}</span>
            </div>
            <div class="overviewlist">
                <label>故障</label>
                <span>{{infoObj.breakdownNum}}</span>
            </div>
            <div ref="myChart" class="myChart">
            </div>
        </div>
    </div>
========================================================
转义后:
'<div class=\'cn-left-summary\'>'+'<div class=\'cn-title\'>'+'<label>{{infoObj.title}}</label>'+'</div>'+'<div class=\'cn-content\'>'+'<div class=\'overviewlist\'>'+'<label>总数</label>'+'<span>{{infoObj.totalNum}}</span>'+'</div>'+' <div class=\'overviewlist\'>'+'<label>运行</label>'+'<span>{{infoObj.runingNum}}</span>'+' </div>'+'<div class=\'overviewlist\'>'+'<label>停止</label>'+'<span>{{infoObj.stopNum}}</span>'+'</div>'+'<div class=\'overviewlist\'>'+'<label>故障</label>'+'<span>{{infoObj.breakdownNum}}</span>'+'</div>'+'<div ref=\'myChart\' class=\'myChart\'>'+'</div>'+'</div>'+'</div>'

2 编译失败的vue页面:

转义前:
            <div class="cn-right-summary">
                <div class="cn-title">
                    <label>集群总览</label>
                </div>
                <div class="cn-content-cluster">
                    <ClusterState />
                    <ClusterCommon ref="clusterCpu"  :infoObj="clusterCpuObj"/>
                    <ClusterCommon ref="ClusterMemory"  :infoObj="clusterMemoryObj"/>
                    <ClusterCommon ref="clusterStorage"  :infoObj="clusterStorageObj"/>
                </div>
            </div>

====================================================
转义后:

'<div class=\'cn-right-summary\'>'+'<div class=\'cn-title\'>'+'<label>集群总览</label>'+'</div>'+'<div class=\'cn-content-cluster\'>'+'<ClusterState />'+'<ClusterCommon ref=\'clusterCpu\'  :infoObj=\'clusterCpuObj\'/>'+'<ClusterCommon ref=\'ClusterMemory\'  :infoObj=\'clusterMemoryObj\'/>'+'<ClusterCommon ref=\'clusterStorage\'  :infoObj=\'clusterStorageObj\'/>'+'</div>'+'</div>'

3 编译vue字符串的vue模板:

<script>
import Vue from 'vue';
export default {
  props: ['template', 'infoObj'],    // template是传进来的字符串模板
  render () {
    const r = Vue.compile(this.template).render;
    return r.call(this);
  },
};
</script>

4 报错信息如下:

[Vue warn]: Error in render: "TypeError: Cannot read property '0' of undefined"

image

###

emm你用到子组件但是你又没有在TemplateRender里声明,Vue怎么去找子组件要加载哪里的代码呢?

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器