kam*_*llo 4 vaadin vaadin-upload vaadin14
我想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);
}
}
Run Code Online (Sandbox Code Playgroud)
自定义上传.css:
:host([theme~="custom-upload"]) {
border: 0;
}
:host([theme~="custom-upload"]) [part="commands"] {
display: none;
}
Run Code Online (Sandbox Code Playgroud)
简化的 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>
Run Code Online (Sandbox Code Playgroud)
文件指出:
commands)https://vaadin.com/components/vaadin-upload/html-api/elements/Vaadin.UploadFileElement。theme值应该根据https://vaadin.com/docs/v14/flow/styling/styling-components/#sub-components传播到所有子组件- 情况似乎并非如此。有没有办法将自定义附加theme到 vaadin-upload-file 组件?
是的,您只需要一个针对vaadin-upload-file组件的单独样式模块,这可以使用@CssImport注释来实现。例如,
@CssImport(value = "./styles/custom-upload-file.css", themeFor = "vaadin-upload-file")
Run Code Online (Sandbox Code Playgroud)
然后可以将自定义 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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在 中vaadin-upload-styles.css,可以执行以下操作:
:host(.hidden-clear) [part~=clear-button] {
display: none;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
743 次 |
| 最近记录: |