weex开发小记(一)

3 篇文章 0 订阅

使用weex开发一个来月了,前前后后踩了不少坑,特此记录,以免遗忘

注意点
css
  1. weex 中默认的设计尺寸是750px
    <meta name="weex-viewport" content="750">
    当真实屏幕不是750px时,weex会自动将设计尺寸映射到真实尺寸中去,即scale —— scale = 当前屏幕尺寸 / 750

    dpi = dp = px 会根据手机变化(相当于rem,是相对大小)

    所以在扩展组件的时候,如果用户传入一个尺寸值,比如说 375,这个值是相对于 750 的设计尺寸来说的。你只需要将这个值乘以 scale, 就是适配当前屏幕的真实尺寸:value = 375 * this.data.scale. 它应该占据真实屏幕一半的大小。

  2. 样式需要使用class属性写,用id不支持,手机上可能显示不出来

  3. 图片需要指定大小才能显示,在移动端可以使用’wx’ 单位(相当于px),不会转化为rem,移动端支持’px’.

  4. iconfont 需要借助“dom”模块

<text class="login-text" style='font-family:iconfont;font-size:24wx;left:2wx'>&#xe67d;</text>
var domModule = weex.requireModule('dom');
domModule.addRule('fontFace', {
  'fontFamily': "iconfont",
  'src': "url('http://at.alicdn.com/t/font_733844_kb66bfef25.woff')"
});
  1. weex默认的HTML根元素的font-size = 屏幕的宽度/10
  2. weex中不支持阴影,设置box-shadow不起作用。
  3. 样式表和CSS规则是由weex.js框架和原生渲染引擎管理的,处于性能考虑,weex目前支持在、单个类选择器,并且只支持CSS规则的子集。
  4. weex支持线性渐变,不支持径向渐变
  5. weex中的box-shadow仅仅支持IOS。 需要给容器的背景手动添加颜色,否则在IOS中背景颜色就是box-shadow的颜色。
  6. weex不支持媒体查询`
  7. image组件设置flex为1后,就可以不用设置widthheight,可以自适应屏幕尺寸.
  8. 使用绝对定位,不一定和web页面的显示一样。在tab页面使用fixed定位时,web中,固定定位的元素是根据第一个tab页面的左边源。而在安卓中是根据屏幕的左侧。
  9. 如果定位元素超过容器边界,在 Android 下,超出部分将不可见,原因在于 Android 端元素 overflow 默认值为 hidden,但目前 Android 暂不支持设置 overflow: visible。
  10. fixed定位的元素z轴位置会比较高
  11. position、transform:改变tab层的位置,此方法在定位为position:fixed; 的子元素上依然无效。
  12. 在APP上 fixed层级最高,但是fixed容器不能滚动。。。。。。
  13. 给style传多个字符串,在APP不能正确显示颜色,需要传递对象
  14. 使用 border 实现的三角形,在 native 环境中是不起作用的,即使样式分开写了,也是不起作用,weex 环境中使用三角形,建议使用 svg。
  15. input 组件设置disabled属性需要写成 <input type="text" disabled="true"> 不能采用web中的简写方式。
Weex 页面跳转

Weex 使用原生的navigator来管理页面实例,多个实例之间的状态是隔离的。也就是说,vuex和vue-router智能作用于当前一个页面,无法在多个页面间共享状态。

在项目中我也就没有使用 vue-routervuex. 使用自己写的router.js统一管理项目中的页面跳转。在页面传递简单的参数时,附加加URL后面,当需要在2个页面间传递复杂的对象时,暂时将2个页面合成一个tab页面实现页面跳转。

安卓native

android APP 项目中本地资源文件读取是要使用file:///协议,安卓版本不同,配置可能不同。默认地址是file:///android_asset,所以在项目中的js引用图片时要使用此地址

在页面跳转时,可以不用直接使用file:///pages/homeIndex.js,不用加 android_asset 是因为在activity类中做了解析.

android Studio 编译时提示 Error: Please select android sdk.
解决方法

与Vue的不兼容点
  1. v-bind:class可以普通class共存,但是v-bind:class只支持数组形式的语法,另外的两种形式对象和字符串都不支持
  2. weex官网文档写着支持vue的标签,实际上并不支持
显示和隐藏
  1. weexdisplay只支持flex,所以无法设置display: none, 自然vuev-show指令也不支持. 但是vuev-if可以使用, 需要注意的是, v-if最好只用来做页面结构的控制, 而不要偷懒作为显示隐藏的手段。
    最佳实践:用v-if做页面结构控制,显示隐藏使用css的visibility属性来控制
    v-if显示和隐藏单元素正常,但是对稍微复杂点的组件在显示的时候会出现抖动,解决方式参考写的另一篇文章解决组件用v-if显示时出现的抖动问题
  2. weex不支持overflow-xoverflow-y, iOS下支持overflow,默认为visible;Android下overflow默认为hidden,且无法设置为visible
  3. opacity、visablity:此处需要注意,Weex的渲染机制和web是有区别的,对父层设置opacity或者visiablity隐藏是无法同时隐藏定位为position:fixed; 的子元素。
js

weex 中不支持Promise的finally方法,支持then和catch**

image组件的load方法在android下失效,且在android下圆角无法设置,安卓端可以自己写一个组件个weex使用

组件中有input组件时,如果给input初始化一个值,且绑定一个onInput事件,则在安卓中会执行onInput函数。而在web中不会

new Date(time) time 在安卓中不能解析 xxxx-xx-xx 格式的时间参数,可以传 20180101 格式的
但是在传 20180101 格式的时间时注意不能传字符串,需要转化为整型,且必须为是时间戳
可以使用 2018,1,1 格式,注意不能为2018,01,01

weex-nat 模块使用注意点
  1. 由于项目中需要上传文件到服务器,所以用到weex-nat模块的transfer模块,但是此模块只支持一次上传一个文件。并且文件流的name 属性已经被写死为file

  2. 调用weex-nat 的image和camera模块时,回调函数不自动执行。需要在相应的安卓项目的activity中重写onActivityResult方法。

   /**
      * 为了执行WXModule扩展模块中定义的{@link com.taobao.weex.common.WXModule#onActivityResult(int, int, Intent)}
      * */
     @Override
     protected void onActivityResult(int requestCode, int resultCode,
                                     Intent data)
     {
         super.onActivityResult(requestCode, resultCode, data);
         if (mWXSDKInstance != null)
         {
             mWXSDKInstance.onActivityResult(requestCode, resultCode, data);
         }
     }
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值