You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Vaadin图标用作img标签的src属性值?

问题

我在Vaadin 23 + Lit Element项目中,希望将Vaadin图标(例如<lumo:undo>)作为<img>标签的src使用,且可以访问后端类。目前尝试的代码无法正常工作,代码如下:

<img id="contact" src="${this.setVaadinIconAsImage()}" />
setVaadinIconAsImage(){
    /* 生成Vaadin图标的路径。我甚至可以调用后端类来获取vaadin-icon的.svg路径。 */  
    
    /* let contact = this.shadowRoot.querySelector("#contact");
           contact.setAttribute("src", "lumo:undo"); 
    */      
    
    return "lumo:undo";     
}
解决方案

前端直接实现

Vaadin的Lumo图标是内置的SVG资源,有两种前端直接获取路径的方式:

方式1:利用IconRegistry生成Data URL

确保项目引入@vaadin/icon依赖,通过IconRegistry获取图标SVG内容并转成Data URL:

import { IconRegistry } from '@vaadin/icon';

setVaadinIconAsImage() {
  const registry = new IconRegistry();
  // 获取lumo:undo的SVG字符串
  const svgContent = registry.getIcon('lumo:undo');
  // 转为Data URL作为img的src
  return `data:image/svg+xml;utf8,${encodeURIComponent(svgContent)}`;
}

方式2:直接引用内置图标路径

Vaadin 23的Lumo图标存放在/frontend/icons/lumo/目录下,每个图标对应同名SVG文件,直接返回绝对路径即可:

setVaadinIconAsImage() {
  return '/frontend/icons/lumo/undo.svg';
}

后端辅助实现

如果需要通过后端类获取图标路径,可以编写后端接口返回资源,再由前端调用:

后端示例(Java)

@GetMapping("/icons/{collection}/{name}")
public ResponseEntity<Resource> getIcon(@PathVariable String collection, @PathVariable String name) {
    // 从类路径中获取对应图标资源
    Resource resource = new ClassPathResource(String.format("META-INF/resources/frontend/icons/%s/%s.svg", collection, name));
    return ResponseEntity.ok()
            .contentType(MediaType.IMAGE_SVG_XML)
            .body(resource);
}

前端调用后端接口

由于接口调用是异步操作,建议在组件的firstUpdated钩子中设置img的src:

<img id="contact" />
async firstUpdated() {
  const contactImg = this.shadowRoot.querySelector('#contact');
  // 直接使用后端接口URL作为src
  contactImg.src = '/icons/lumo/undo';
  
  // 或者获取SVG内容转为Data URL(可选)
  // const response = await fetch('/icons/lumo/undo');
  // const svgText = await response.text();
  // contactImg.src = `data:image/svg+xml;utf8,${encodeURIComponent(svgText)}`;
}

内容的提问来源于stack exchange,提问作者lsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 06:27:44