Subscribe on changes!

有关v-html的使用问题

avatar
Aug 4th 2023

What problem does this feature solve?

这是截图 image 现在有一个问题 js文件是如下这样的

export const linkJson=[
    {
        url:'https://github.com/mhxy13867806343',
        svg:`<svg class="text-zinc-50" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33c.85 0 1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg>`,
        title:'github'
    },
    {
        url:'https://juejin.cn/user/1310273588955581',
        svg:`<svg class="text-zinc-50" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="m2 12l10 7.422L22 12"/><path d="m7 9l5 4l5-4m-6-3l1 .8l1-.8l-1-.8z"/></g></svg>`,
        title:'掘金'
    }
]

然后到.vue中使用,如下

<div class="pr-3 flex">
                <p  class="flex align-baseline pl-14 items-center	"
                 v-for="(item,index) in linkJson" :key="index"
                >
                    <el-link type="primary" :href="item.url">
                    <span class="text-zinc-50 text-sm items-center	pr-1.5">{{  item.title}}</span>
                        <span  v-html="item.svg"></span>
                    </el-link>
                </p>
            </div>

这个,会在浏览器页面上,多渲染出这样的标签,而我希望,不想渲染这个 ,只渲染item.svg中的内容到页面上,不希望多一个标签节点

What does the proposed API look like?

,希望v-html能够添加额外的参数,比如v-html:xx="item.svg" :xx表示是否可以去除父级标签之类功能

avatar
Aug 4th 2023

你可以处理一下 svg 字符串,把最外层的节点去掉,然后使用 <svg v-html="..." /> 来渲染。

avatar
Aug 5th 2023

好的