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

模板内容:

<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 })

}

}

}

请大佬指点。先谢过了


回答:

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)

}

}

}


回答:

slot 不香吗?

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

以上是 vue.js 2模板中输出VNode错在哪了? 的全部内容, 来源链接: utcz.com/p/934481.html

回到顶部