当前位置: 首页 > 知识库问答 >
问题:

javascript - vue.js 2模板中输出VNode错在哪了?

纪实
2023-06-20

模板内容:

<template>
  <div>
    <el-row>
        <h4 class="title-center" style="font-size:13px;">变更内容</h4>
        <table class="oams-table" v-loading="isLoding">
          <tbody>
            <tr v-for="(val,key,index) in alterBase" :key="index">
              <td class="title-center">{{ index+1 }}</td>
              <td>{{ printChangeItem(val.item) }}</td>
              <td class="value-column"><renderVDom :vNode="printAdapterExpr(val.item, val.before, 'before')"></renderVDom></td> 
              <td class="value-column"><renderVDom :vNode="printAdapterExpr(val.item, val.after, 'after')"></renderVDom></td>
            </tr>
          </tbody>
        </table>
    </el-row>
  </div>
</template>

script 内容:

export default {
  name: 'xxxx',
  components: {
    renderVDom: {
      props: {
        vNode: [Array, String, Object, Number] // 这里为什么要这么写其实报一个类型检测不通过我补一个的,一开始我只写了数组和字符串。因为我这里其实不一定是vnode,毕竟直接传字符串和数字也可以,干嘛非得是vnode
      },
      render (h) {
        return h('div', this.vNode)
      }
    }
  },
  props: {},
  methods: {
    printAdapterExpr(key, val, offset){
      return this.$createElement('span', { innerHTML: val })
    }
  }
}

请大佬指点。先谢过了

共有2个答案

颜骁
2023-06-20

slot 不香吗?

而且你这里不就是 innerHTML 吗?直接 ref 操作 dom 也可以呀

酆晔
2023-06-20

script修正为:

export default {
  name: 'xxxx',
  components: {
    renderVDom: {
      props: {
        vNode: [Array, String, Object, Number]
      },
      methods:{
        isVNode(arg){
          // 获取 vnode 实例
          let _vnode = this.$createElement('span', '')
          // VNode 构造函数
          let __VNode = _vnode.constructor
          return arg instanceof __VNode
        }
      },
      render (h, context) {
        return this.isVNode(this.vNode) ? this.vNode : h('div', { domProps: { innerHTML: this.vNode } }, [])
      }
    }
  },
  props: {},
  methods: {
    printAdapterExpr(key, val, offset){
      // 若不存在直接输出
      // 1)非VNode
      return val
      // 2)
      //  2.1) JSX 
      // return <span>{val}</span>
      //  2.2) 创建VNode
      // return this.$createElement('span', val)
    }
  }
}
 类似资料:
  • 内容输出方法为:display() 将模板内容输出: $this->display(); //调用默认对应模板

  • 问题内容: 我希望能够将当前循环迭代输出到我的模板。 根据文档:http : //wsgiarea.pocoo.org/jinja/docs/loops.html,我正在尝试使用一个loop.counter变量。 我有以下内容: 虽然没有任何输出到我的模板。正确的语法是什么? 问题答案: 循环内部的计数器变量在jinja2中称为 loop.index 。 有关更多信息,请参见http://jinj

  • 假设在一个在线商店的应用系统中需要一个HTML页面,和下面这个页面类似: <html> <head> <title>Welcome!</title> </head> <body> <h1>Welcome John Doe!</h1> <p>Our latest product: <a href="products/greenmouse.html">green mouse</a>!

  • 我使用SpringBoot和mySql数据库。 我正在尝试筛选搜索通过一个表格的团队。最初,这个表是一个thymeleaf表(参见我的相关SO问题),但在用尽了互联网上所有可用的资源后,我决定以不同的方式实现搜索,但没有成功。 我发现了一个非常有用的网站,它有一个实用的,相关的例子,我想要实现什么。 解析模板“索引”时出错,模板可能不存在,或者任何已配置的模板解析程序都无法访问 Thymeleaf

  • 问题内容: 我使用下面的代码可以正常工作,但是现在我想将模板打印到文件中,并尝试以下操作但出现错误 错误是: 问题答案: 使用数组作为第二个参数,而不是模板本身。 输出: 而且的内容是