集成 GWT 和 angular2
integrating GWT and angular2
我在 GWT 中有一个大项目,我正在尝试将 Angular2 与其集成。 (angular2-gwt 不是一个选项,因为我是 运行 版本 2.7,当时无法迁移到 2.8)
我面临着一些我似乎不知道如何面对的问题:
1) 我听说您可以使用 JSNI 来使用 angular 应用程序,但我似乎无法做到这一点,也找不到任何相关信息。它是如何工作的,我可以用它做什么? (调用一个函数是一个选项?)
2) 我尝试将 angular 应用程序的选择器标记添加到 GWT 入口点 html 并且效果很好,但是当我尝试将选择器添加到 .ui.xml 文件(UI 绑定)它不起作用,为什么?
3) 是否有从 servlet 调用 GWT 客户端的选项?我的意思是我在 angular2 应用程序中使用了 rest 调用,这个 rest 调用可以在 GWT 客户端调用某些东西吗?
谢谢!
首先,我应该注意到从 GWT 2.7 迁移到 GWT 2.8 对我来说非常轻松。我更新了我的应用程序并且没有遇到任何重大问题(一些 Maven 依赖项发生了变化,一些标记在这里和那里,等等)。
我之所以提到这一点,是因为与 GWT 2.7 相比,GWT 2.8 中的原生 JS 支持得到了极大的改进,所以如果可能的话,你真的应该进行切换。
无论如何,在 GWT 2.7 中:
- 您可以像这样从 GWT 调用任何类型的 JS:
public static native void sayHello() /*-{
$wnd.alert("Hello world!");
}-*/;
请注意 $wnd
结构,它是 JS 中 "global" 命名空间的占位符(即在 JS 中,您只需调用 alert()
而无需使用特定的命名空间)。
但是请注意,如果您要与 大量 的 JS 本机代码交互(例如使用来自 angular 的复杂对象),您将需要付费走这条路要付出高昂的代价。当你想从 JS 调用一个或两个函数时,这条路线很有用,但除此之外我不推荐它。
例如,您可以在 http://www.gwtopenlayers.org/ 查看 gwt-openlayers
的源代码,并查看更复杂的示例(该库包装了大量原生 JS)
- 我真的不认识任何 angular,但是
.ui.xml
是一个特殊的野兽。在后台发生了一些混淆/发生了一些其他事情。最接近 HTML 的方法是将一些东西放入 g:HTMLPanel
小部件中,但据我所知,你不能真正将 JS 放入其中。
- 有点混淆你在这里问的问题。除非您坚持,否则您不能轻易地从服务器端 servlet 调用任何客户端代码;然后,您可以采取变通办法并使用长轮询等技术,但我不太喜欢这些技术。我可以在这个主题上展开更多,但我似乎对你的观点缺乏理解。
我在 GWT 中有一个大项目,我正在尝试将 Angular2 与其集成。 (angular2-gwt 不是一个选项,因为我是 运行 版本 2.7,当时无法迁移到 2.8)
我面临着一些我似乎不知道如何面对的问题:
1) 我听说您可以使用 JSNI 来使用 angular 应用程序,但我似乎无法做到这一点,也找不到任何相关信息。它是如何工作的,我可以用它做什么? (调用一个函数是一个选项?)
2) 我尝试将 angular 应用程序的选择器标记添加到 GWT 入口点 html 并且效果很好,但是当我尝试将选择器添加到 .ui.xml 文件(UI 绑定)它不起作用,为什么?
3) 是否有从 servlet 调用 GWT 客户端的选项?我的意思是我在 angular2 应用程序中使用了 rest 调用,这个 rest 调用可以在 GWT 客户端调用某些东西吗?
谢谢!
首先,我应该注意到从 GWT 2.7 迁移到 GWT 2.8 对我来说非常轻松。我更新了我的应用程序并且没有遇到任何重大问题(一些 Maven 依赖项发生了变化,一些标记在这里和那里,等等)。 我之所以提到这一点,是因为与 GWT 2.7 相比,GWT 2.8 中的原生 JS 支持得到了极大的改进,所以如果可能的话,你真的应该进行切换。
无论如何,在 GWT 2.7 中:
- 您可以像这样从 GWT 调用任何类型的 JS:
public static native void sayHello() /*-{
$wnd.alert("Hello world!");
}-*/;
请注意 $wnd
结构,它是 JS 中 "global" 命名空间的占位符(即在 JS 中,您只需调用 alert()
而无需使用特定的命名空间)。
但是请注意,如果您要与 大量 的 JS 本机代码交互(例如使用来自 angular 的复杂对象),您将需要付费走这条路要付出高昂的代价。当你想从 JS 调用一个或两个函数时,这条路线很有用,但除此之外我不推荐它。
例如,您可以在 http://www.gwtopenlayers.org/ 查看 gwt-openlayers
的源代码,并查看更复杂的示例(该库包装了大量原生 JS)
- 我真的不认识任何 angular,但是
.ui.xml
是一个特殊的野兽。在后台发生了一些混淆/发生了一些其他事情。最接近 HTML 的方法是将一些东西放入g:HTMLPanel
小部件中,但据我所知,你不能真正将 JS 放入其中。 - 有点混淆你在这里问的问题。除非您坚持,否则您不能轻易地从服务器端 servlet 调用任何客户端代码;然后,您可以采取变通办法并使用长轮询等技术,但我不太喜欢这些技术。我可以在这个主题上展开更多,但我似乎对你的观点缺乏理解。