3 min read

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

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

最近公司有意向将服务号转移到原生应用和 web,我们目前使用的是 vue1.x 进行的服务号开发,所以我们选择了 weex。

当前 weex 版本为 0.8.0。

数据绑定

  1. 支持属性值插值 <div style="{{value}}"></div>
  2. dom 事件用 onclick,而不是 @click,其他事件以此类推
  3. 没有 v-for,而是用 repeat 代替,没有 track-by,而是用 index 代替
  4. 没有 v-if,而是用 if 代替
  5. 加入一次性绑定属性标签 static,这样只在初始化时候绑定一次数据
  6. this.items[index] = item 修改数组不会触发视图更新,需要使用 this.items.$set(index, item)
  7. 加入 append 属性标签,有两个值:nodetree
  8. input 不自动追踪 value,需要通过 oninputonchange 监听

dom

  1. <template> 中有三种根节点:<div><scroller><list>
  2. 所有文本都要包含在 <text> 元素内,支持 lines css 属性,用于限制行数,0 代表不限制
  3. 下拉刷新 <refresh>,上拉加载 <loading>
  4. 根据 id 获取元素:this.$el('#dom-id')
  5. 滚动到固定元素:dom.scrollToElement(node, options)
  6. 不允许相同方向的 <list> 或者 <scroller> 互相嵌套
  7. <image>/<img> 需要显示声明宽度和高度,否则不显示,支持 srcresize

css

  1. 屏幕宽度统一为 750px
  2. 选择器只支持 class 单个名字的选择器
  3. 只支持 px 单位,可以不写
  4. 样式不会继成
  5. flexbox 是默认且唯一的布局模型,不需要手动为元素添加 display: flex 属性
  6. 不支持 z-index,靠后的元素层级更高

事件

  1. $event 包含以下 key:
    • type (string): 事件名称, 如: click
    • target (Element): 目标元素
    • timestamp (number): 事件触发时的时间戳数字
    • value (string): 输入的值
  2. 加入了 pan 事件,比 touch 事件更迅速,但是不够精细
  3. 添加了 appeardisappearlongpressviewappearviewdisappear 事件

组件

  1. 组件没有 props 属性,全都通过 data 传递
  2. 通过 module.export 导出,require 引入
  3. 父子组件通过 this._parent.$emit(type, detail)this.$vm(id).$emit(type, detail) 进行通信
  4. 顶级组件可以加入 <script type="data"> 标签,会覆盖顶级组件对应数据
  5. 加入很有用的 <switch> 组件,就是开关组件
  6. 还加入了 <wxc-navpage> 组件,就是顶部导航组件
  7. 一系列内建组件

优点

  1. weex 提供了更丰富内建组件,例如:下拉刷新、底部加载、高性能滚动
  2. weex 的 js 部分基本符合 vue1.x 的规则,所以迁移过程在 js 部分应该改动较少

缺点

  1. weex 对于 css 部分属性的不支持,的确有些不方便,目前前端开发普遍对 css 不上心的大环境下,这一方面阻碍了 css 在 weex 中的应用,也让前端人员对 css 更加忽视
  2. weex 中 dom 的属性的语法还停留在插值阶段,并不如 vue 中的那么灵活,一时还不好适应
  3. 不支持 input 的数据绑定,要你何用