Vert.x AngularJS编写client-side应用 译<十二>

TIP:相应的代码在step-9文件夹中(https://github.com/vert-x3/vertx-guide-for-java-devs)

到目前为止我们的Web界面使用传统的HTML内容的服务器端渲染,某些类型的应用程序可以利用客户端渲染,改善用户体验,避免整页重新加载,侵入的原生程序体验。

许多流行的框架应运而生,我们选择流行的AngularJS来写,但是你也可以同等的使用React,Vue.js,Roit和其他框架或者类库。

Single page application

我们之前编写的Wiki页面可以选择页面,编辑模式下一半是Markdown editor,一半是预览效果:

105234_gYwR_2277632.png

HTML预览是由我们的后台调用一个新的endpoint呈现,重新渲染会在当Markdown editor文本改变的时候。为了避免用户在频繁编写Markdown,造成后台超负荷处理了不成功的请求,造成了编写Markdown后预览的渲染延迟,在延迟的时间内什么都没改变。

应用界面也是动态的,"新的页面"删除按钮消失:

105930_3gM0_2277632.png

Vert.x Backend

简化HTTP verticle代码

client-side应用需要后天支持以下:

    1.浏览器可以引入静态的HTML, CSS 和 JavaScript 

    2.服务端提供的web api(HTTP/JSON service)

我们简化HTTP verticle,仅仅实现我们需要的,从step8中使用Rxjava版本开始,我们移除了服务端渲染的代码,像authentication 和 JWT token 只是提供了HTTP/JSON接口。

比如我们现在将apiUpdatePage方法实现改成:

110849_0fYy_2277632.png

Exposed routes

110913_jNmn_2277632.png

前端请求/app,我们会重定向到/app/index.html静态文件:

111036_ajaS_2277632.png

    1.不使用缓存是有用的

    2.默认文件需要放在webroot路径下,对于Maven 或 Gradle 应用src/main/resources/webroot

最后我们需要应用程序后台渲染Markdown到HTML,我们提供一个HTTP post请求:

111415_Y9Je_2277632.png

AngularJS frontend

TIP:这篇文档不太介绍AngularJS(see the official tutorial instead),我们假设读者熟悉了其他的一些框架。

Application view

src/main/resources/webroot/index.html文件的头部分如下:

112142_qinU_2277632.png

    1.AngularJS模块命名为wikiApp

    2.wiki.js用于AngularJS module 和 controller

你看到的,我们除了AngularJS,还加入了其他CDNs中的依赖:

    1.boostrap

    2.Font Awesome

    3.Lodash

Bootstrap需要其他的scripts,为了文件加载的性能考虑:

112623_o9F3_2277632.png

我们的AngularJS controller 是 WikiController,被绑定到div,也是一个Bootstrap 容器:

<div class="container" ng-controller="WikiController">
  <!-- (...) -->

顶部的按钮包含以下的元素:

112827_fXgb_2277632.png

    1.对于每一个wiki页面,我们用ng-repeat 和 ng-click 定义controller action (load)

    2.更新按钮绑定 reload controller action

    3.ng-show引导是否显示元素,根据controller pageExists的值判断

    4.div被用于显示成功或者失败的提示

Markdown预览和编辑元素如下:

113219_MpZa_2277632.png

    1.ng-model绑定textarea到controller的pageMarkdown

Application controller

wiki.js JavaScript以AngularJS模板申明开始:

113436_GYV9_2277632.png

wikiApp没有其他附加依赖,声明一个WikiController,这个controller需要以下的属性:

    1.$scope

    2.$http 发送异步HTTP 请求到后端

    3.$timeout

Controller方法被系到$scope对象上,我们以线面3个简单方法开始:

113800_ilDr_2277632.png

创建页面的初始化controller 属性加到$scope对象上,重新加载页面,执行HTTP的Get请求,重新加载后台的数据。pageExists用来判断在页面上显示不显示相应elements。

载入页面的内容也是执行HTTP GET请求,更新预览的DOM操作:

165036_m9tP_2277632.png

下一个方法用来支持saving / updating and deleting 页面,第一个参数用来指出success,第二个参数用来指出error。我们这里介绍success和error helper methods显示通知(3s->success,5s->error)

170405_ykO4_2277632.png

170425_pVUJ_2277632.png

初始化页面的列表数据,并开始一个新的空白页面编辑器:

170537_HLCg_2277632.png

最后,这里是我们的实时的Markdown文本渲染:

170626_Bw3E_2277632.png

    1.$scope.$watch 在state 改变的时候允许被修改,这里我们监测的pagemarkdown属性绑定到编辑文本的变化。

    2.300毫秒的延迟是个好的选择来出发渲染

    3.我们做了延迟渲染而不是在每一个按键都去执行,比如state是取消了之前的页面,又去创建了一个新的页面的这种情况。

    4.我们让后台渲染编辑器的文本到HTML,然后刷新预览。

原文链接:http://vertx.io/docs/guide-for-java-devs/

103728_2T6n_2277632.png

我的微信公众号:

223108_3TsV_2277632.png

转载于:https://my.oschina.net/u/2277632/blog/1592191

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值