Weex 从入门到完整项目(1) 环境搭建

Weex简介


weex 一个简单的介绍

阿里为了自己电商系APP 开发的一套快速迭代的混合开发框架,Weex 可打包为静态js 文件发布公网实现随时热更新的需求.

混合开发的几种方式 简单的优势与劣势

1.历史悠久且 经久不衰的 cordova 传送门:http://cordova.apache.org/
前身是Adobe 的PhoneGap 这种模式 适合纯前端人员制作App.其 主要原理就是将 一些html等资源文件打包到APP 中,抛弃原生View 用WebView来实现其跨平台的特性. 只要兼容 Android 和IOS 内置的WebView 界面就可以做到 复用.ionic 是使用angular 语法+Cordova 插件 基本类似
但是 这种方式在不同的手机上 表现力不同. 太依赖手机的性能与系统WebView 的优化能力. (IOS 还行 ,Android性能看 手机厂商 手机型号 手机价格 手机电量 手机... 总之很多很多) 版本升级 一般需要将 新版本的 页面 通过下载文件的方式下载到本地. 不需要 重写安装apk. 也可以通过 不需上架的方式进行更新 但是毕竟体验不好 IOS 有很大风险 说不定哪天不给上架了. 学习成本上来讲 纯前端 很容易搞定 .

2.RN 现在最主流的混合开发方式,传送门:https://reactnative.cn/
时间也比较久的 偏向原生的混合开发方式,支持 全部项目使用RN 或者 部分页面接入RN.RN 只是简单 看了一些文档, 目测 是打包资源到本地 版本更新 下载新文件到本地,本地js 文件 通过RN 原生解析翻译为 Native 代码. 相对比较稳定,文档全.react 学习成本略高.比较麻烦的是 IOS Android 要兼容各自特点 可能需要写两套代码.React Native,Learn once, write anywhere

3.Weex 阿里巴巴 开源项目 传送门:
http://weex.apache.org/cn/guide/
https://alibaba.github.io/weex-ui/#/cn/
缺点: 官网文档 感觉一年不更新了.
优点:不需要用户下载文件进行更新. 可以部署在 公网上.也支持将静态文件打包到APP 安装包中, 做下来感觉 原生的知识 还是要有一些.

图片.png

综上所述吧 第一种是 Web前端 一个人就可以搞定一个APP.时间 人力成本很低. 但是性能 还无法替代 原生APP地位 .但是 技术的发展 慢慢有的RN 使用前端技术编写 最后映射成原生代码. 效率上 肯定没有纯原生,不过已经发展的很好了.所以 后面APP 混合开发肯定是主流了. RN 和 Weex 都有不错的效果 都有不少的坑. 慢慢 排坑吧.

环境搭建

详见http://weex.apache.org/cn/guide/set-up-env.html
原生接入
Android 环境
下载Android Studio
Gradle

    implementation 'com.squareup.picasso:picasso:2.5.2'
    implementation 'com.facebook.fresco:fresco:0.10.0'
    implementation 'com.taobao.android.weex_inspection:protocol:1.1.4.1'
    implementation 'com.taobao.android:weex_inspector:0.11.0'
    implementation 'com.taobao.android:weex_sdk:0.17.0'
    implementation 'com.taobao.android:weex_analyzer:0.1.0.5'
    implementation 'com.taobao.android.weex_inspection:urlconnection_interceptor:1.0.0'
    implementation 'com.squareup.okhttp:okhttp:2.3.0'
    implementation 'com.squareup.okhttp:okhttp-ws:2.3.0'
    implementation 'com.alibaba:fastjson:1.2.44'

IOS 环境
首先 卖肾买个Mac 然后 安装 Xcode
pod

pod 'WeexSDK' 
pod 'WXDevtool', '0.15.3'
pod 'SDWebImage', '3.7.5'
pod 'SocketRocket', '0.4.2'
pod 'ATSDK-Weex', '0.0.1'

Weex 环境
按照文档 安装 node 与weex-toolkit
使用脚手架 创建一个项目
weex-Ui 介绍
https://alibaba.github.io/weex-ui/#/cn/
npm i weex-ui -S
安装weex-ui

使用 WebStorm 或者 VS Code 打开项目
1.npm run build
2.npm run serve/dev

可以在web 端 打开 简单 helloWord


到此 环境 搭建成功!
制作一个Demo
实现 weex->native->weex 的交互
功能点
1.原生按钮点击 跳转 至 Weex 页面
2.点击Weex 按钮 显示原生 时间选择控件
3.将选择时间 回传给weex 并在weex 中显示 选中的时间

Demo 目的:实现 原生与weex 的相互调用。

weex 代码

<template>
   <div class="button-list">
        <text class="button-text">normal</text>
        <wxc-button :text="selectDateStrin"
                    type="normal"
                    @wxcButtonClicked="wxcButtonClicked"></wxc-button>
        <text class="button-text">highlight</text>
        <wxc-button :text="selectDateStrin"
                    type="highlight"
                    @wxcButtonClicked="wxcButtonClicked"></wxc-button>
        <text class="button-text">red</text>
        <wxc-button :text="selectDateStrin"
                    type="red"
                    @wxcButtonClicked="wxcButtonClicked"></wxc-button>
        <text class="button-text">yellow</text>
        <wxc-button :text="selectDateStrin"
                    type="yellow"
                    @wxcButtonClicked="wxcButtonClicked"></wxc-button>
        <text class="button-text">disabled</text>
        <wxc-button :text="selectDateStrin"
                    :disabled="true"
                    @wxcButtonClicked="wxcButtonClicked"></wxc-button>
      </div>
</template>

<script>
var datetime = "选择时间";
var modal = weex.requireModule("modal");

var globalEvent = weex.requireModule("globalEvent");

import { WxcButton } from "weex-ui";

export default {
  created() {
    let _self = this;
    globalEvent.addEventListener("selectDateEvent", function(e) {
      _self.selectDateStrin = e.datetime;

      modal.toast({
        message: "选择时间" + e.datetime,
        duration: 0.3
      });
    });
  },

  data() {
    return {
      selectDateStrin: datetime
    };
  },
  components: { WxcButton },
  methods: {
    wxcButtonClicked(e) {
      console.log(e);
      modal.toast({
        message: "This is a toast",
        duration: 0.3
      });

      weex.requireModule("myModule").showPickTime("js调原生时间选择控件");
    },
    updateDatetime(obj) {
      selectDateStrin = obj;
    }
  }
};
</script>

<style scoped>
.button-list {
  padding-left: 24px;
}

.button-text {
  margin-top: 40px;
  margin-left: 8px;
  margin-bottom: 16px;
}
</style>



这部分有一个 小坑
<text class="button-text">highlight</text>必须写在一行
下方写法是 错误方式 (毕竟 不是web,必须按照他的标准去编写 最终要反射为原生文本控件 )
<text class="button-text">
highlight
</text>

代码解释
官方给的 一些对话框 提示框的内置组件
weex.requireModule("modal");

全局事件 组件
weex.requireModule("globalEvent");

原生注册 Moudle 需要在 Android (APplication)IOS (APPDelegate ) 中注册 myModule 
weex.requireModule("myModule" )

Android 使用 注解的方式 weex.requireModule("myModule").showPickTime("js调原生时间选择控件");
在Android 自定义Moudle 创建 showPickTime 方法
加上@JSMethod(uiThread = true) 映射 js方法

    @JSMethod(uiThread = true)
    public void showPickTime(String msg) 
image.png

在IOS 自定义Moudle 创建 showPickTime 方法

将方法 映射js 方法
WX_EXPORT_METHOD(@selector(showPickTime:))
-(void)showPickTime:(NSString *) msg
image.png

效果图

Simulator Screen Shot - iPhone 8 Plus - 2018-01-10 at 11.14.18.png
图片2
图片3

源码下载地址 :

IOS :http://download.csdn.net/download/chinaltz/10198137
Android http://download.csdn.net/download/chinaltz/10198144
weex:http://download.csdn.net/download/chinaltz/10198200

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,408评论 4 371
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,690评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,036评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,726评论 0 221
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,123评论 3 296
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,037评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,178评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,964评论 0 213
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,703评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,863评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,333评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,658评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,374评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,195评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,988评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,167评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,970评论 2 279

推荐阅读更多精彩内容