Поток Vaadin: Как добавить имя класса в шаблон

#vaadin #vaadin-flow

Вопрос:

У меня есть компонент Vaadin в файле шаблона:

 import {LitElement, html} from 'lit-element';
import '@vaadin/vaadin-text-field/vaadin-text-field.js';
import '@vaadin/vaadin-button/vaadin-button.js';

class HelloWorld extends LitElement {

    render() {
        return html`
            <div>
                <vaadin-text-field id="firstInput"></vaadin-text-field>
                <vaadin-button id="helloButton">Click me!</vaadin-button>
            </div>`;
    }
}

customElements.define('hello-world', HelloWorld);
 

и файл класса java на стороне сервера:

 @Tag("hello-world")
@JsModule("./src/hello-world.ts")
public class HelloWorld extends LitTemplate {

    /**
     * Creates the hello world template.
     */
    public HelloWorld() {
        addClassName("my-style"); // Method not available!!
    }
}
 

В классе java я хочу добавить имя класса ко всему компоненту шаблона, чтобы придать ему динамический стиль. Но метод «addClassName()» недоступен в LitTemplate. Можно ли добавить имя класса на табличку? В инспекторе браузера я могу добавить ‘class=»мой стиль»‘ в компонент hello-world вручную, и это работает.

Ответ №1:

используйте HasStyle миксин для доступа к этому методу:

 public class HelloWorld extends LitTemplate implements HasStyle { ... }
 

Вы можете увидеть реализацию, чтобы увидеть, что находится под ней https://github.com/vaadin/flow/blob/master/flow-server/src/main/java/com/vaadin/flow/component/HasStyle.java

Комментарии:

1. Просто в качестве примечания: В более поздних версиях Vaadin (в настоящее время я рассматриваю версию 20) LitTemplate уже реализует HasStyle.

Ответ №2:

Внедрение HasStyle должно работать:

 @Tag("hello-world")
@JsModule("./src/hello-world.ts")
public class HelloWorld extends LitTemplate implements HasStyle {
    public HelloWorld() {
        addClassName("my-style");
    }
}
 

Комментарии:

1. Извините, опубликовано в то же время, что и другой ответ