如何在 Vaadin Flow 的组件中填充 属性 的更改?
How can i populate a change of a property in a Component in Vaadin Flow?
我有以下 class 一个可见的小旋转器:
@Tag("granite-spinner")
@NpmPackage(value = "@granite-elements/granite-spinner", version = "3.0.0")
@JsModule("@granite-elements/granite-spinner/granite-spinner.js")
public class BusyComponent extends Component implements HasEnabled {
@Override
public void onEnabledStateChanged(boolean enabled) {
getElement().setProperty("active", enabled);
}
}
在我的 MainView 中调用:
@Route("")
@PWA(name = "Project Base", shortName = "Project Base")
@Push
public class MainView extends VerticalLayout implements PageConfigurator {
public MainView() {
UI currUI = UI.getCurrent();
final BusyComponent bc = new BusyComponent();
final Button button = new Button("Click me");
button.addClickListener(event -> {
button.setEnabled(false);
bc.setEnabled(true);
new Thread(() -> {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
currUI.access(() -> {
button.setEnabled(true);
bc.setEnabled(false);
});
}).start();
});
add(bc);
add(button);
}
}
按钮在我点击时禁用,3 秒后启用。但是 Spinner 继续旋转。 属性 更改未更新。有人知道为什么吗?
TLDR; 你做对了一切。您的代码没有任何问题,而且 webcomponent 似乎对属性更改没有反应
更长的版本:
我已经在 Vaadin 项目之外尝试过这个网络组件,不幸的是,它没有按照您期望的方式工作。
此外,它在 description:
中说明
active: boolean | null | undefined
If true spinner is shown
(所以并不单独表示设置一次后visibility就更新了..)
这里有一个例子JSFiddle example
因此,我们的 Vaadin 代码没有任何问题,并且 active
属性 在单击按钮时 removed/added 是正确的,如果您在 devTools 中签入。
Web 组件似乎在渲染一次后根本不会对 属性 更改做出反应。如果查看其实现代码,属性 active
仅在 render()
函数中使用 Code in unpkg.
我不是 web 组件方面的专家,所以不确定它应该如何实现,但也许你可以创建一个错误报告到组件的 Github 仓库?如果需要,请随意重用示例 JSFiddle :)
我有以下 class 一个可见的小旋转器:
@Tag("granite-spinner")
@NpmPackage(value = "@granite-elements/granite-spinner", version = "3.0.0")
@JsModule("@granite-elements/granite-spinner/granite-spinner.js")
public class BusyComponent extends Component implements HasEnabled {
@Override
public void onEnabledStateChanged(boolean enabled) {
getElement().setProperty("active", enabled);
}
}
在我的 MainView 中调用:
@Route("")
@PWA(name = "Project Base", shortName = "Project Base")
@Push
public class MainView extends VerticalLayout implements PageConfigurator {
public MainView() {
UI currUI = UI.getCurrent();
final BusyComponent bc = new BusyComponent();
final Button button = new Button("Click me");
button.addClickListener(event -> {
button.setEnabled(false);
bc.setEnabled(true);
new Thread(() -> {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
currUI.access(() -> {
button.setEnabled(true);
bc.setEnabled(false);
});
}).start();
});
add(bc);
add(button);
}
}
按钮在我点击时禁用,3 秒后启用。但是 Spinner 继续旋转。 属性 更改未更新。有人知道为什么吗?
TLDR; 你做对了一切。您的代码没有任何问题,而且 webcomponent 似乎对属性更改没有反应
更长的版本:
我已经在 Vaadin 项目之外尝试过这个网络组件,不幸的是,它没有按照您期望的方式工作。 此外,它在 description:
中说明active: boolean | null | undefined If true spinner is shown
(所以并不单独表示设置一次后visibility就更新了..)
这里有一个例子JSFiddle example
因此,我们的 Vaadin 代码没有任何问题,并且 active
属性 在单击按钮时 removed/added 是正确的,如果您在 devTools 中签入。
Web 组件似乎在渲染一次后根本不会对 属性 更改做出反应。如果查看其实现代码,属性 active
仅在 render()
函数中使用 Code in unpkg.
我不是 web 组件方面的专家,所以不确定它应该如何实现,但也许你可以创建一个错误报告到组件的 Github 仓库?如果需要,请随意重用示例 JSFiddle :)