weex 是阿里出品的一个类似RN的框架,可以使用前端技术来开发移动应用,实现一份代码支持H5,IOS和Android。而weex-hacknews则是weex官方出品的,首个使用 Weex 和 Vue 开发的 Hacker News 原生应用,在项目中使用了 Vuex 和 vue-router等官方组件。本文会分析weex-hacknews的代码,学习如何使用weex进行开发,本文是第二部分,第一部分见(http://www.cnblogs.com/xiaoqi/p/weex-hackernews-code-part1.html)

二、代码分析

将项目里的src导入到IDE里,可以看到代码结构如下:

接上文

  1. 再来看入口程序

代码如下,注意标红:

6.1 App.vue

代码如下:

定义了一个div作为body容器,router-view作为component容器

@androidback="back"处理了Android返回按钮点击事件,点击返回按钮时,router执行back回退。

6.2 入口程序

通过Vue.util.extend,将router和store注入到所有子组件,这样就可以使用`this.$router`and`this.$store`来访问路由和vuex。

代码最后一行,router.push('/') , 跳转到'/', 根据上篇的内容,会跳转到/top

  1. 首页

    我们来看StoriesView,主要UI代码如下:

    几个关键点

    7.1 组件通过props属性传递数据

    Vues.js可以使用 props 把数据传给子组件,prop 是父组件用来传递数据的一个自定义属性,子组件需要显式地用 props 选项声明 "prop":

    我们再来看router.js里的createStoriesView方法,是否恍然大悟?

7.2 子组件

在StoriesView中,包含app-header、story两个子组件,使用时需要import:

7.2.1 app-header 组件

代码如下:

几个关键点:

  • @click 处理点击事件,jump是在入口程序里mixin的router跳转函数
  • weex里,text用于显示文本元素,可以理解为html里的span

7.2.2 story 组件

<story :story="story"></story>

调用的时候,将story对象作为props传递过去了,我们猜测下,story组件有一个story的props属性,来看代码验证:

不出所料,包含story对象,并且是required,通过该属性将story传递过来。

值得一提的是,这里使用了timeAgo filter,还有extennal-link子组件,v-if条件判断等。

剩下的就是具体的数据绑定,不细说了。

7.2.3 数据加载

  • 在入口程序通过Vue.util.extend将store注入,所以在子组件可以使用this.$store访问vuex
  • 通过名为stories的computed计算属性访问数据
  • 在created(vue.js生命周期,可理解为jq的ready)时,调用fetchListData,实则是调用FETCH_LIST_DATA action,调用前设置loading为true,显示loading;
  • 处理成功的话,设置loading = false,loading隐藏。

  • loadMoreStories 则是加载更多数据,list列表事件,下滑到底部时触发

其他页面类似,这里就不一 一介绍了

三、小结

weex-hacknews的代码分析就告一段落了,总体感觉:

  • Weex 可以让前端开发人员开发native app程序,值得点赞,但缺点是目前坑还比较多,开源社区资源也较少
  • Vuejs router应该是简化了开发,推荐使用
  • vuex则较难理解,开发复杂度也较高,大家在实际项目中需要酌情考虑是单独维护组件的state,还是使用vuex维护全局的state,推荐中大型的单页应用项目使用vuex

weex官方demo weex-hackernews代码解读(下)的更多相关文章

  1. weex官方demo weex-hackernews代码解读(上)

    一.介绍 weex 是阿里出品的一个类似RN的框架,可以使用前端技术来开发移动应用,实现一份代码支持H5,IOS和Android.最新版本的weex已默认将vue.js作为前端框架,而weex-hac ...

  2. weex官方demo weex-hackernews代码解读(1)

    一.介绍 weex 是阿里出品的一个类似RN的框架,可以使用前端技术来开发移动应用,实现一份代码支持H5,IOS和Android.最新版本的weex已默认将vue.js作为前端框架,而weex-hac ...

  3. Android MVP模式 谷歌官方代码解读

    Google官方MVP Sample代码解读 关于Android程序的构架, 当前(2016.10)最流行的模式即为MVP模式, Google官方提供了Sample代码来展示这种模式的用法. Repo ...

  4. c++(vs上)与g++(linux下)对于++操作的汇编代码解读

    先来看一个代码,估计很多同学都碰到过其中的某一个. #include <stdio.h> #include <iostream> using namespace std; in ...

  5. 订餐系统之微信支付,踩了官方demo的坑

        最近一个项目要增加微信支付的功能,想来这个东西出来这么久了,按微信提供的应该可以很快搞定的,结果提供的demo( JS API网页支付)中各种坑,咨询他们的客服,态度倒是非常好,就是解决不了问 ...

  6. Unity 官方 Demo: 2DPlatformer 的 SLua 版本。

    9月份时,趁着国庆阅兵的假期,将 Unity 官方 Demo: 2DPlatformer 移植了一个 SLua 版本,并放在了我的 GitHub 账号下:https://github.com/yauk ...

  7. Jsoup代码解读之三-Document的输出

    Jsoup代码解读之三-Document的输出   Jsoup官方说明里,一个重要的功能就是output tidy HTML.这里我们看看Jsoup是如何输出HTML的. HTML相关知识 分析代码前 ...

  8. Qt5官方demo分析集11——Qt Quick Particles Examples - Affectors

    在这个系列中的所有文章都可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集10--Qt ...

  9. 【EasyUI学习-1】MyEclipse+easyui学习官方Demo

    介绍 easyui的介绍,网上很多,这里就不进行介绍了. easyUI获取 官网: http://www.jeasyui.com/  下载地址:http://www.jeasyui.com/downl ...

随机推荐

  1. 测试部署nginx

    1.已经安装了nginx 2.修改tomcat端口号为10081(可随意) 3 修改nginx的nginx.config  如下: upstream apiserver {           ip_ ...

  2. 试水MongoDB

    1)安装好后启动mongodb 服务 1_1) 建立data/db     ,保证至少有3g大小的盘 1_2) 建立log 文件夹 1_3)配置文件 内容,指定数据存放位置.日志文件位置 dbpath ...

  3. css 之!important

    主要是自己犯了个错误: 把 !important 放到了分号后面; 正确写法写法: .current{ background-color: #f1f1f1; border-left: 2px soli ...

  4. IOS开发-UI学习-UINavigationController(导航控制器)的使用

    UINavigationController是IOS 中常用的功能,基本用法如下: 1.在AppDelegate.m中添加如下代码: #import "AppDelegate.h" ...

  5. Java Spring MVC项目搭建(二)——项目配置

    1.站点配置文件web.xml 每一个Spring MVC 项目都必须有一个站点配置文件web.xml,他的主要功能吗....有一位大哥已经整理的很好,我借来了,大家看看: 引用博客地址: http: ...

  6. iOS 之 内嵌网页

    现在iOS 有两种内嵌网页的技术,一种是UIWebView,而另一种WKWebView则是iOS8之后出现的技术. iOS 之 UIWebView WKWebView

  7. JMeter 连接数据库报错No suitable driver found for jdbc:xxxxxxxxx

    添加JDBC Connection Configuration 和 JDBC Request 组件,添加相关信息 注意两个组件里面输入的Variable Name 必须一致 运行查看结果树出现如下错误 ...

  8. Quartz2D 之 简单介绍

    1. 概述 Quartz2D 是一个二维绘图引擎. 主要功能: 绘制图形:线.矩形.圆.弧 绘制文字 绘制图片 绘制PDF 裁截图片 自定义UI控件 2. 图形上下文 Graphics Context ...

  9. MongoDB复制集环境搭建

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://suifu.blog.51cto.com/9167728/1853478 环境介绍 ...

  10. IOS开发缓存机制之—本地缓存机制

    功能需求 这个缓存机制满足下面这些功能. 1.可以将数据缓存到本地磁盘. 2.可以判断一个资源是否已经被缓存.如果已经被缓存,在请求相同的资源,先到本地磁盘搜索. 3.可以判断文件缓存什么时候过期.这 ...