weex 中与原生 vue 1.x 不同的地方

最近公司有意向将服务号转移到原生应用和 web,我们目前使用的是 vue1.x 进行的服务号开发,所以我们选择了 weex。
当前 weex 版本为 0.8.0。
数据绑定
- 支持属性值插值
<div style="{{value}}"></div>
- dom 事件用
onclick
,而不是@click
,其他事件以此类推 - 没有
v-for
,而是用repeat
代替,没有track-by
,而是用index
代替 - 没有
v-if
,而是用if
代替 - 加入一次性绑定属性标签
static
,这样只在初始化时候绑定一次数据 this.items[index] = item
修改数组不会触发视图更新,需要使用this.items.$set(index, item)
- 加入
append
属性标签,有两个值:node
、tree
input
不自动追踪value
,需要通过oninput
或onchange
监听
dom
<template>
中有三种根节点:<div>
、<scroller>
、<list>
- 所有文本都要包含在
<text>
元素内,支持lines
css 属性,用于限制行数,0 代表不限制 - 下拉刷新
<refresh>
,上拉加载<loading>
- 根据 id 获取元素:
this.$el('#dom-id')
- 滚动到固定元素:
dom.scrollToElement(node, options)
- 不允许相同方向的
<list>
或者<scroller>
互相嵌套 <image>
/<img>
需要显示声明宽度和高度,否则不显示,支持src
和resize
css
- 屏幕宽度统一为
750px
- 选择器只支持
class
单个名字的选择器 - 只支持
px
单位,可以不写 - 样式不会继成
- flexbox 是默认且唯一的布局模型,不需要手动为元素添加
display: flex
属性 - 不支持
z-index
,靠后的元素层级更高
事件
$event
包含以下 key:type
(string): 事件名称, 如: clicktarget
(Element): 目标元素timestamp
(number): 事件触发时的时间戳数字value
(string): 输入的值
- 加入了
pan
事件,比touch
事件更迅速,但是不够精细 - 添加了
appear
、disappear
、longpress
、viewappear
、viewdisappear
事件
组件
- 组件没有
props
属性,全都通过data
传递 - 通过
module.export
导出,require
引入 - 父子组件通过
this._parent.$emit(type, detail)
和this.$vm(id).$emit(type, detail)
进行通信 - 顶级组件可以加入
<script type="data">
标签,会覆盖顶级组件对应数据 - 加入很有用的
<switch>
组件,就是开关组件 - 还加入了
<wxc-navpage>
组件,就是顶部导航组件 - 一系列内建组件
优点
- weex 提供了更丰富内建组件,例如:下拉刷新、底部加载、高性能滚动
- weex 的 js 部分基本符合 vue1.x 的规则,所以迁移过程在 js 部分应该改动较少
缺点
- weex 对于 css 部分属性的不支持,的确有些不方便,目前前端开发普遍对 css 不上心的大环境下,这一方面阻碍了 css 在 weex 中的应用,也让前端人员对 css 更加忽视
- weex 中 dom 的属性的语法还停留在插值阶段,并不如 vue 中的那么灵活,一时还不好适应
- 不支持 input 的数据绑定,要你何用