用@Tag(Tag.DIV)注释和从Div类扩展之间的区别

时间:2018-10-04 12:43:11

标签: vaadin vaadin10 vaadin-flow

我正在学习Vaddin 11,我对此有疑问,这有什么区别?

public class MyClass extends Div { /... }

...还有这个?:

@Tag(Tag.DIV)
public class MyClass { /** }

根据文档:

  

潜水课:   表示<div>元素的组件。

-

  

标签注释:   定义标签,该标签用于使用默认Component构造函数创建的组件的根元素。

看起来它们做同样的事情:创建一个类来表示根元素。是吗?

2 个答案:

答案 0 :(得分:2)

这两种方式都会在浏览器中为您提供一个<div>元素(除了您需要向extends Component示例中添加@Tag(Tag.DIV)之外。

区别在于Div类还专门为<div>元素定义了一些其他API,而如果创建通用Component子类,则可以完全控制组件的公共API与@Tag(Tag.DIV)

答案 1 :(得分:1)

区别在于服务器端API。 Div类本身确实很简单,但是它确实通过其父类(例如HasSizeHasStyle)实现了一些有用的混合接口。这意味着您可以例如如果要扩展myClass.setHeight("500px"),请致电Div

另一方面,如果您使用@Tag批注来告诉您的MyComponent类在客户端上具有div标记,则不会公开任何服务器端方法除了您决定提供自己的东西。这是好事还是坏事取决于您要提供给班级用户的哪些功能。