微信小程序开发初试(Taro、Vant-weapp)

Taro & Vant Weapp

组件实例

this.selectComponent('.classSelector')

引入

Taro

Taro中引入Vant Weapp,不能直接通过第三方NPM包的形式直接调用。

需要进行以下几步:

  • 在github上找到Vant-weapp下载文件包,将对应的dist目录复制到项目/src/components/vant-weapp目录下。
  • Pages对应文件的config.usingComponents中,配置每个页面所需要的组件。(无法在app.js中进行所谓的全局注册组件。)
  config = {
    navigationBarTitleText: '首页',
    usingComponents: {
      "van-button": "../../components/vant-weapp/button/index",
      "van-popup": "../../components/vant-weapp/popup/index"
    }
  }
  • 在使用Vant-weapp组件后,taro构建会自动将相应的组件复制一份到dist/components下,而Vant-weapp的组件还依赖工具库/src/components/vant-weapp/wxs,该工具库taro不会自动复制到dist中。所以,我们需要修改/config/index.js文件中的config.copy.patterns,让其在编译时,自动复制到dist对应目录下。
  copy: {
    patterns: [
      {
        from: 'src/components/vant-weapp/wxs/',
        to: 'dist/components/vant-weapp/wxs/'
      }
    ],
    options: {
    }
  },
  • 由于Vant-weapp的样式使用的单位是px,所以会被taro编译成rpx,以便对各个设配进行适配。可以通过修改/config/index.js文件中的config.weapp.module.pxtransform.selectorBlackList不让其单位转换。
pxtransform: {
  enable: true,
  config: {

  },
  selectorBlackList: [
    /^.van-.*?$/,  // 这里是vant-weapp中className的匹配模式
  ]
},

ec-canvas

ec-canvas
ECharts 的微信小程序版本。

Canvas引起的层级覆盖问题

canvas是由客户端创建的原生组件,而原生组件的层级是最高的,所以页面中的其他组件无论设置
z-index 为多少,都无法盖在原生组件上。

所以,如果canvas和遮罩交互同时存在时,canvas会在遮罩的上层。

解决方案:

  • canvas外包裹一层结构,通过条件(遮罩的开关)来设置canvas容器的hidden属性。
  • 通过cover-viewcover-image自定义组件,cover-view通过定位,提升层级,可以防止被canvas覆盖。

    • 因为后插入的原生组件可以覆盖之前的原生组件,所以,要注意:结构上,cover-view一定要在canvas后边
    • 可以通过flexorder来调整展示顺序。
    • 只有最外层cover-view才支持position: fixed

iconfont

下载到本地,什么都不要改,放到指定位置。

该资源不会自动拷贝到dist/文件夹下,所以需要通过修改配置文件拷贝。

  copy: {
    patterns: [
      ...
      {
        from: 'src/assets/fonts/',
        to: 'dist/assets/fonts/'
      },
      ...
    ],
    options: {
    }
  }

然后,在app.js入口文件中,import './assets/fonts/iconfont.css'

注意:开发完,上传版本的时候,开发者工具会报告图标字体文件没有被打包上传,然而,可以正常的预览体验版。

自定义组件

组件向外传参

this.triggerEvent(
  'eventType',
  {
    key: value, //这里定义的键值对,在父组件中,通过args.detail.key获取;
  },
  {
    bubbles: true, //事件属性:是否冒泡;
    capturePhase: true, //事件属性: 是否可捕获;
  }
)

插槽slot

用法同
Vue

注意:组件内部对slot定义的样式,不起作用。只能在调用组件的位置,对传入slot内的结构进行样式定义。

注意事项

typeof

wx:if语句中,不能使用typeof运算符,{{}}中不能使用typeof运算符,只能在wxs中使用。

data初始化赋值

不知道data什么时机初始化,但,初始化data的时候,不能使用this指向当前组件实例(这是this === void 0),也就是说,data初始化只能给一个常量

需要propertiesmethods来初始化data的时候,只能在生命周期attached中通过this.setData更新data的值。

而且,如果data.fn = this.methodNamemethodName中如果调用了this引用,这时this指向的是data,所以需要使用data.fn = this.methodName.bind(this)

canvas层级最高

参见上述引入ec-canvas部分。

vant-weapp库中的popup样式设置

popup内容的大小不是由内容撑起来的,需要通过popup组件的custom-class定义一个类名,设置widthheight来定义内容的尺寸。

vant-tree-select事件触发

Taro中的代码风格类React,而vant-weapp库中的代码风格为wxmlwxs风格。React绑定事件是驼峰式,wxml绑定事件是使用-连字符分隔。

这就造成了Taro使用vant-tree-select组件时,onClickNavonClickItem不会被vant-tree-select识别,事件无法触发。

解决方案

  • @tarojs/cli低版本,对vant-tree-select进行二次封装,事件原始触发通过this.$triggerEvent传出驼峰式的事件类型,在Taro中调用。
  • 升级@tarojs/cli的版本,如1.2.0版本无法触发驼峰式命名的事件,升级到最新版1.3.15,使用onClick-nav形式绑定事件就可以了。

目前vant-weapp0.5.20中,vant-tree-select不支持单选。

props获取不到

驼峰式命名的事件无法触发[微信小程序]

注意@tarojs/cli版本,如最初用的1.2.0版本就获取不到自定义组件传的参数,升级到最新版1.3.15就可以了。

注意@tarojs/cli版本,如最初用的1.2.0版本无法触发驼峰式命名的事件,升级到最新版1.3.15,使用onClick-nav形式绑定事件就可以了。

Taro编译器无法自动将用到组件的.wxs文件移动到/dist相应目录下

修改/config/index.js文件中的config.copy.patterns,让其在编译时,自动复制到dist对应目录下。

  copy: {
    patterns: [
      {
        from: 'src/components/vant-weapp/**/*.wxs',
        to: 'dist/components/vant-weapp/**/*.wxs'
      }
    ],
    options: {
    }
  },

微信开发者工具中运行Taro代码,如果有async/await,则regenerator is not defined。

微信开发者工具–> 右上角详情–> 本地设置里的配置全部关掉,如ES6转ES5…。

定制echarts,引入报错

echarts.js不需要再次编译,配置中新增编译时忽略echarts.js

weapp: {
    ...
    compile: {
      exclude: ['src/echarts-for-weixin/ec-canvas/echarts.js']
    }
}

getState()获取Store存储的数据

可以在(dispatch, getState) => {中使用。

真机调试正常,预览/体验版空白(只有tabbar)

将”本地设置”–> “上传时进行代码保护”取消勾选。

TaroclassName=''单引号赋值不起作用。

className的值使用双引号包裹。

Taro自定义组件内部使用iconfont,不显示图标

参照外部样式类、全局样式类
或者,组件单独引入iconfont.css也可以。

    原文作者:米花儿团儿
    原文地址: https://segmentfault.com/a/1190000020255902
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞