我在GWT有一个大项目,我正在尝试将Angular2与它集成. (
angular2-gwt不是一个选项,因为我在2.7版本上运行,当时无法迁移到2.8)
我面临一些我似乎不知道如何面对的问题:
1)我听说你可以使用JSNI来使用角度应用程序,但我似乎无法做到这一点或找到任何有关它的信息.它是如何工作的,我能用它做什么? (调用函数是一个选项?)
2)我试图将角度应用程序的选择器标签添加到GWT入口点html,并且运行良好,但是当我尝试将选择器添加到.ui.xml文件(UI绑定)时,它不起作用,为什么?
3)是否有从servlet调用GWT客户端的选项?我的意思是我在angular2应用程序并使用休息呼叫,这个休息呼叫可以在GWT客户端调用某些东西吗?
谢谢!
最佳答案 首先,我应该注意到从GWT 2.7到GWT 2.8的迁移对我来说非常轻松.我更新了我的应用程序并且没有任何重大问题(一些Maven依赖项发生了变化,一些标记在这里和那里等).
我之所以提到这一点,是因为本机JS支持在GWT 2.8和GWT 2.7中得到了极大的改进,所以如果可能的话,你真的应该进行切换.
无论如何,在GWT 2.7中:
>您可以像这样从GWT调用任何类型的JS:
public static native void sayHello()/ * – {
$wnd.alert(“Hello world!”);
} – * /;
注意$wnd构造,它是JS中“全局”命名空间的占位符(即在JS中,你只需调用alert()而不使用特定的命名空间).
但是请注意,如果您正在使用许多JS本机代码(例如使用角度来看的复杂对象),那么您将为这条路线付出沉重的代价.当你想从JS调用一个或两个函数时,这个路径是好的,但除此之外我不推荐它.
您可以在http://www.gwtopenlayers.org/的gwt-openlayers的源代码中查看示例,看看它是如何看待更复杂的示例(这个库包含了很多本机JS)
>我真的不知道任何角度,但.ui.xml是一个特殊的野兽.一些混淆发生在后台/其他一些事情发生.你最接近HTML的是将一些东西放在g:HTMLPanel小部件中,但据我所知,你不能真正拥有JS.
>有点混淆你在这里问的问题.除非你坚持,否则你不能轻易地从服务器端servlet调用任何客户端代码;那么,你可以做变通办法并使用诸如长期民意调查等技术,但我不是那些人的忠实粉丝.我可以在这个问题上进一步扩展,但似乎我对你的观点的理解可能缺乏.