最近需要撸一个app来满足用户的需求,找来找去发现flutter不错,决定用它但是时间不够(准备挤出时间再去研究flutter),进度又催得紧,最后决定选weex这个上手快些,说干就干打开官网跟着api开始撸起,花了2天发现他对我已经没有刚开始那么抵触(相信我们将来会是很好的朋友),so写一下记录我们的相识、相知、相…,哈哈

所需技术栈:h5、js、css 、node、vue、android(java)、ios(objective-c/swift) 哇哇!好多,不怕我可是程序猿哪里不会撸哪里,直接撸到它天方地老、撸到海枯石烂、撸到精尽人亡,咦,咦,我说什么了[黑人问号脸],我什么也没说,呵呵。

一、 环境搭建

1、安装node

	这个直接跑[官网https://nodejs.org/en/download/](https://nodejs.org/en/download/)下载一个

2、vue安装配置

这个就不用说了,你懂滴

3、安装weex-toolkit


npm install weex-toolkit -g

4、安装脚手架工具weexplus


npm install weexplus -g

二、创建一个项目


weexplus create your-project-name

三、运行新项目测试

1) 下载测试app https://pan.baidu.com/s/1vs2tXC-Oazepf62K608LzA 安装到手机上

2) cd your-project-name 再执行 npm install 安装依赖

3)开一个窗口 cd your-project-name 运行 npm run native

4) 再开一个窗口 cd your-project-name 运行 weexplus start

5) 如果没有报错就会自动开启一个浏览器,如:



点击浏览器中入口js(我的是index.js)



如果是上图 这样证明一需要重新运行wexxplus start 或者重新运行 npm run native,不然你扫描了就是下图这样



6) 用下载的app 扫描上图二维码下载 就可以看见运行的demo 页面了

四、页面引入子组件

  1. import引入
    import pageBanner from './components/base/pageBanner.vue'

引入vue组件报错

2)weex.requireModule 引入

只能使用如下方式(经过测试发现也是错误的,如下3有解释)

let pageBanner = weex.requireModule('./components/base/pageBanner')

3)require 引入

经测试发现 weex.requireModule 是当成module引入的,无法挂载到components,

so 上面使用 weex.requireModule引入页面无法使用子组件;只能使用require引入方可以使用如下:

 let pageBanner =  require('./components/base/pageBanner.vue');

五、使用weexplus start 重新编译时常常会提示



目录删除异常

六、页面跳转只能使用如下方式,而无法使用 vue-rooter

router.js

export function getEntryUrl(url) {
let navigator = weex.requireModule('navigator')
// this.log(weex.config.env.platform)
if (weex.config.env.platform != 'iOS') {
//注意android不要用presentFull
navigator.pushFull({url: url, animated: false})
} else {
navigator.presentFull({url: url, animated: false})
}
}

index.vue

     methods: {
jumppage(){
getEntryUrl('root:components/personal/index.js');
},
}

七、 安装weexplus 后再次使用 weex create my-proj 创建weex项目会报错

具体看我的weex create test-app Error: Cannot find module ‘…/package.json’

八、 打包android apk 后主页面错误



这个把我纠结了好久,不管怎么打包安装到手机上主页都是上图。问大佬些都不理我(哎,菜鸟的人生是苦涩的)。

没办法自己找问题呗

最后在无数次失败后看见文档有如下提示(只怪自己读文档不专心)



麻麻蛋~

说干就干,修改了configs>weexplus.json



再次运行weexplus publish android; 安装到手机



总算又顺利趟过了一个坑

九、 页面布局坑

今天使用不同分辨率手机进行测试,发现有点屏幕显示,底部有空白区域,无法铺满全屏。如下图



页面代码

<template>
<div class="page-container">
<page-banner></page-banner>
<div class="page-wrapper">
<scroller class="scroller">
// other content
</scroller>
</div>
</div>
</template> <script>
import pageBanner from ''
export default{}
</script>
<style scoped>
.page-wrapper{
width:750px;
height:1334px;
position: relative;
}
.scroller{
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: -1;
background-color: #ebf4f9; } </style>

一直不明白原由,于是求助于weex官网技术,他们说不需要设置高度,于是我取消掉了height;

但是页面什么都不显示(一片空白)

我看见了scroller设置了position: absolute;,于是我去掉了这个,页面是可以出来了,但是滚动失效了!

于是再看文档:



当作根元素或者父元素使用,否则页面无法滚动 粗心

还好,原来有做app 开发的经验,在正式步入开发之前做好了设配适配的工作,否则在所以功能开发完成后再来该就麻烦了~

文档提示如下:



最后我换成了如下的list来实现滚动

十、 list 上拉加载更多,下拉刷新

切勿直接在list上使用loadmore,因为他只会加载一次,这个纠结我好久

<list @loadmore ="onloadmore"></list>

正确做法代码如下

<template>
<div>
<list offset-accuracy="300" loadmoreoffset="300">
<header>
<text class="banner"></text>
</header>
<refresh class="loadingbox" @refresh="onrefresh" :display="refreshing ? 'show' : 'hide'">
<text class="indicator-text">正在刷新数据...</text>
</refresh>
<cell v-for="(num, index) in lists" :key="index">
<div class="panel">
<text class="text">{{num}}</text>
</div>
</cell>
<loading class="loadingbox" @loading="onloadingMore" :display="loadingingMore ? 'show' : 'hide'">
<text class="indicator-text">正在加载中...</text>
<!--<image class="loading" src="https://img.alicdn.com/tfs/TB1CWnby7yWBuNjy0FpXXassXXa-32-32.gif"/>-->
</loading>
</list>
</div>
</template>
<script>
const modal = weex.requireModule('modal') || {};
export default {
data() {
return {
isShow: true,
refreshing: false,
loadinging: false,
lists: [1, 2, 3, 4, 5]
};
},
methods: {
onrefresh(event) {
modal.toast({
message: "refresh",
duration: 1
});
this.refreshing = true;
setTimeout(() => {
this.lists = [1, 2, 3, 4, 5];
this.refreshing = false;
}, 1000);
},
onloadingMore(event) {
modal.toast({ message: "Loading", duration: 1 });
this.loadinging = true;
setTimeout(() => {
this.loadinging = false;
const length = this.lists.length;
for (let i = length; i < length + 10; i++) {
this.lists.push(i + 1);
}
}, 1000);
}
}
}
</script>
<style scoped lang="stylus" rel="stylesheet/stylus">
.loadingbox
align-items center
padding 20px
height 80px
</style>

十一、监听安卓返回按钮

看见了平台的这段代码


var page=weex.requireModule("page")
page.doubleBack();

于是就在自己的页面直接引用(发现不行)

<script type="text/ecmascript-6">
var page=weex.requireModule("page")
page.reload();
page.doubleBack();
</script>

另一种写在createdmounted(发现也不行,往往是等回退到了上一级页面才提示)


<script type="text/ecmascript-6">
export default {
// mounted(){
// var page=weex.requireModule("page")
// page.reload();
// page.doubleBack();
// },
created(){
var page=weex.requireModule("page")
page.reload();
page.doubleBack();
},
}
</script>



如上图,等退出了index页面才会提示‘再按一次退出应用’ 这个肯定不是我想要的

纠结了好几天都准备自己改源码了的==》

解决办法是写在methods的onLoad里(麻麻蛋)


<script type="text/ecmascript-6">
export default {
methods: {
onLoad() {
// 控制Android的返回按钮
const page = weex.requireModule("page");
page.doubleBack();
},
}
}
</script>

weexplus官网https://farwolf2010.github.io/doc/introduce.html

待续…

使用weexplus + vue开发APP的填坑之旅的更多相关文章

  1. 使用vue开发微信公众号下SPA站点的填坑之旅

    原文发表于本人博客,点击进入使用vue开发微信公众号下SPA站点的填坑之旅 本文为我创业过程中,开发项目的填坑之旅.作为一个技术宅男,我的项目是做一个微信公众号,前后端全部自己搞定,不浪费国家一分钱^ ...

  2. React Native填坑之旅--布局篇

    代码在这里: https://github.com/future-challenger/petshop/tree/master/client/petshop/src/controller 回头看看RN ...

  3. bootstrap-table填坑之旅<一>认识bootstrap-table

    应公司需求,改版公司ERP的数据显示样式.由于前期开发的样式是bootstrap,所以选bootstrap-table理所当然(也是因为看了bootstrap-table官网的example功能强大, ...

  4. React Native填坑之旅--与Native通信之iOS篇

    终于开始新一篇的填坑之旅了.RN厉害的一个地方就是RN可以和Native组件通信.这个Native组件包括native的库和自定义视图,我们今天主要设计的内容是native库方面的只是.自定义视图的使 ...

  5. React Native填坑之旅--Flow篇(番外)

    flow不是React Native必会的技能,但是作为正式的产品开发优势很有必要掌握的技能之一.所以,算是RN填坑之旅系列的番外篇. Flow是一个静态的检查类型检查工具,设计之初的目的就是为了可以 ...

  6. stm32填坑之旅 - stm32f103c8t6点亮板载贴片蓝色LED

    转载请注明:https://www.cnblogs.com/rockyf/p/11691622.html 开篇 开篇一定要精彩,不然路人不理睬!下述是笔者作为arm小白的填坑之旅 没错,这个之前一直从 ...

  7. https填坑之旅

    Boss说,我们买了个权威证书,不如做全站式的https吧,让用户打开主页就能看到受信任的绿标.于是我们就开始了填坑之旅. [只上主域好不好?] 不好...console会报出一大堆warning因为 ...

  8. Android—基于微信开放平台v3SDK,开发微信支付填坑。

    接触微信支付之前听说过这是一个坑,,,心里已经有了准备...我以为我没准跳坑出不来了,没有想到我填上了,调用成功之后我感觉公司所有的同事都是漂亮的,隔着北京的大雾霾我仿佛看见了太阳~~~好了,装逼结束 ...

  9. React Native填坑之旅--重新认识RN

    如同黑夜里的一道光一样,就这么知道了F8. F8是每年一次Facebook每年一次的开发者大会.每次大会都会release相应的APP,iOS.Android都有.之前都是用Native开发的,但是2 ...

  10. React Native填坑之旅 -- 使用iOS原生视图(高德地图)

    在开发React Native的App的时候,你会遇到很多情况是原生的视图组件已经开发好了的.有的是系统的SDK提供的,有的是第三方试图组件,总之你的APP可以直接使用的原生视图是很多的.React ...

随机推荐

  1. 矩形面积k次交 UVA - 11983

    算是模板题,会了面积交这个应该就会了,正常面积交分为覆盖1次以上,两次以上,这个就分为覆盖1到k次以上就行了. 这个题有点边界问题:是让你求覆盖的点,所以你可以假设一个1*1的正方向表示它的左下角被覆 ...

  2. js直接操作数据库会怎么样

    这几天刷脉脉的时候看到一个话题初看觉得可笑,再看陷入沉思,最后还是决定花点时间想清楚,写下来. 确实没见人这么干过,为什么呢? 技术限制 被技术限制了?据我所知目前没有面向js的数据库驱动,但反观现在 ...

  3. 4种API性能恶化根因分析

    摘要:服务发生性能恶化时,需要投入大量人力分析性能异常根因,分析成本高,耗时长.我们提出了一种先在异常调用链内部分析候选根因,再在全局拓扑环境下对候选根因进行汇聚的二级分析方法,克服了调用链之间异常相 ...

  4. Gin中间件middleware

    类型 全局中间件 单个路由中间件 群组中间件 Reference

  5. C# +SQL 存储过程 实现系统数据权限审查AOP效果

    背景: 1.C/S系统架构 2.前端 Extjs 3.后台C# 4.数据库SQL 前端通过ajAx请求与后台通信. 前端应用页面统一继承入口类  BasePage 应用页面 public partia ...

  6. 深度学习之PyTorch实战(4)——迁移学习

    (这篇博客其实很早之前就写过了,就是自己对当前学习pytorch的一个教程学习做了一个学习笔记,一直未发现,今天整理一下,发出来与前面基础形成连载,方便初学者看,但是可能部分pytorch和torch ...

  7. 武装你的WEBAPI-ODATA聚合查询

    本文属于OData系列 目录 武装你的WEBAPI-OData入门 武装你的WEBAPI-OData便捷查询 武装你的WEBAPI-OData分页查询 武装你的WEBAPI-OData资源更新Delt ...

  8. Go - 高并发抢到红包实现

    // utils.gopackage mainimport ( "fmt" "math/rand" "sync" "time&qu ...

  9. WPF 界面布局、常用控件入门教程实例 WPF入门学习控件快速教程例子 WPF上位机、工控串口通信经典入门

    WPF(Windows Presentation Foundation)是一种用于创建 Windows 桌面应用程序的框架,它提供了丰富的控件库和灵活的界面布局,可以创建现代化的用户界面.下面是 WP ...

  10. 在Ubuntu 18.04上安装NVIDIA

    安装NVIDIA显卡驱动风险极大,新手注意. 在Ubuntu 18.04上安装NVIDIA有三种方法: 使用标准Ubuntu仓库进行自动化安装 使用PPA仓库进行自动化安装 使用官方的NVIDIA驱动 ...