gpt4 book ai didi

vaadin - 如何在 Vaadin Upload 中设置 vaadin-upload-file 组件的样式

转载 作者:行者123 更新时间:2023-12-05 00:52:37 27 4
gpt4 key购买 nike

我想通过更改文件列表中元素的外观来设置 Vaadin Upload 组件 (vaadin-upload) 的样式,例如隐藏命令按钮(开始、删除、重试)。文件列表包含 vaadin-upload-file 元素。

目前我只能通过向其添加自定义主题并导入适当的 css 来自定义 vaadin-upload 本身 - 就像在此示例中一样:https://cookbook.vaadin.com/large-upload-area .

@CssImport(value = "./styles/custom-upload.css", themeFor = "vaadin-upload")
public class MainView extends VerticalLayout implements HasUrlParameter<String> {

public MainView() {
Upload upload = new Upload();
upload.getElement().getThemeList().add("custom-upload");
add(upload);
}
}

自定义上传.css:

:host([theme~="custom-upload"]) {
border: 0;
}

:host([theme~="custom-upload"]) [part="commands"] {
display: none;
}

简化的 DOM:

<vaadin-upload theme="custom-upload" target="VAADIN/dynamic/resource/1/70860bf9-21c4-474e-9418-fd5516c28736/upload">
#shadow-root
<div part="primary-buttons">...</div>
<slot name="file-list">
<div id="fileList" part="file-list">
<vaadin-upload-file>...</vaadin-upload-file>
</div>
</slot>
...
</vaadin-upload>

文档指出:

有没有办法将自定义 theme 附加到 vaadin-upload-file 组件?

最佳答案

是的,您只需要一个针对 vaadin-upload-file 组件的单独样式模块,这可以使用 @CssImport 注释来实现。例如,

@CssImport(value = "./styles/custom-upload-file.css", themeFor = "vaadin-upload-file")

然后可以将自定义 CSS 添加到 {project_root}/frontend/styles/custom-upload-file.css

编辑: 与其他 Vaadin 组件不同,分配给 vaadin-upload 的主题名称不会(不幸地)向下传播到 vaadin-upload-file。因此,不能依赖主题属性来选择性地设置同一应用程序中的某些 vaadin-upload-file 组件的样式。

如果需要选择性样式,则可以通过 JavaScript 调用将类名添加到 vaadin-upload-file 组件,从而实现一种变通的解决方法。但是,只有在 vaadin-upload-file 在 DOM 中呈现后(通常在文件上传成功时发生),此类调用才会起作用。因此,JS 调用应该在上传成功监听器中进行。

这是用于选择性地隐藏 vaadin-upload-file 的清除按钮的解决方法:

@Route
@CssImport(value = "./styles/vaadin-upload-styles.css", themeFor = "vaadin-upload-file")
public class MainView extends VerticalLayout {

public MainView() {

MemoryBuffer buffer = new MemoryBuffer();
Upload upload = new Upload(buffer);
upload.addSucceededListener(e -> {
upload.getElement()
.executeJs("this.shadowRoot.querySelector('vaadin-upload-file').className = 'hidden-clear'");
});

Button showClear = new Button("Show clear button", e -> upload.getElement()
.executeJs("this.shadowRoot.querySelector('vaadin-upload-file').className = ''"));

add(upload, showClear);
}

}

然后在 vaadin-upload-styles.css 中,可以执行以下操作:

:host(.hidden-clear) [part~=clear-button] {
display: none;
}

关于vaadin - 如何在 Vaadin Upload 中设置 vaadin-upload-file 组件的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69899064/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com