javascript - 动态 svg xlink :href not rending the icons in browser

标签 javascript vue.js svg vuejs2

我在 Vue 单文件组件中有一个选项卡结构,其中使用 use 组件内的 svg Sprite 和动态变量加载图标。

<svg class="w-4 h-4 fill-current text-blue-500 mb-2 mx-auto">
<use class="h-4 w-4" :xlink:href="`@/assets/ui-icons.svg#${tab.name}`"></use>
</svg>

结果在 Chrome 和 Safari 中显示为空白。 SVG 不会呈现,即使 DEV 工具完全按照应有的方式显示编译后的代码。

Still from Chrome Dev Tools

最佳答案

假设您使用的是 Webpack:

@/assets/ui-icons.svg 是一个相对 URI,大概由 resolve-url-loader 处理以解析为 SVG 的真实 URI转译您的网站时提交文件。但是,resolve-url-loader 仅在传输时运行,这里您在 Vue 绑定(bind) (:xlink:href) 中有这个 URI,它在运行时,因此 resolve-url-loader 无法修复它。尝试这样做:

<svg class="w-4 h-4 fill-current text-blue-500 mb-2 mx-auto">
  <use class="h-4 w-4" :xlink:href="require('@/assets/ui-icons.svg') + `#${tab.name}`"></use>
</svg>

require() 调用将调用 resolve-url-loader 并解析到您的 SVG 文件,而其余部分将链接到该 SVG 文件中的特定项目你想引用。如果您为 SVG 指定了其他加载程序,那么您将需要覆盖它们,如下所示:

require('!resolve-url-loader!@/assets/ui-icons.svg')

关于javascript - 动态 svg xlink :href not rending the icons in browser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58696106/

相关文章:

Javascript 对象,在 C 中制作类似

javascript - 无法将数组加载到 ngTable

javascript - 可编辑组合框

javascript - 如何更新 react 对象(和一般属性)?

javascript - 使 svg 快照图像在 div 上排列

javascript - 如何将悬停事件添加到 SVG 中的多个路径?它在 IE9 中工作吗?

php - 通知 Ajax/Javascript 后台 PHP 已完成

javascript - 在 vue js 中有条件地绑定(bind)自定义指令 'clicking outside an element event'

javascript - 无样式内容 vuejs 的 Flash

javascript - d3.js 数据第一次未绑定(bind)