相同的 html 代码,采用 v-html 和直接书写存在差异如何解决?
在 vue.JS 应用中,使用 时,有时会遇到与直接在模板中书写的 html 代码呈现不同效果的情况,这让人疑惑不已。
为了解决这个问题,demo 中提供了以下示例:
<template> <svg viewbox="0 0 20 20"> <path .../> <path .../> </svg> </template> <template> <svg v-html="'viewbox="0 0 20 20" ...'" > <!-- ... --> </svg> </template>
差异原因
出现这种差异的原因在于 svg 中 viewbox 属性的书写规范。
- 直接在模板中书写时,由于 vue 自动将属性名转换为小写,因此应使用 viewbox。
- 而使用 v-html 时,属性名保持原样,因此需要使用 viewbox。
解决方案
要解决此差异,可以使用以下方法:
- 在 vue 模板中将 viewbox 属性修改为 viewbox:
<template> <svg viewbox="0 0 20 20"> <!-- ... --> </svg> </template>
- 在使用 v-html 时,手动将 viewbox 转换为小写:
<template> <svg v-html="'viewbox="0 0 20 20" ...'" > <!-- ... --> </svg> </template>