美文网首页代码笔记程序员微信小程序
使用wepy开发小程序-1|简单了解,其实也没什么难的

使用wepy开发小程序-1|简单了解,其实也没什么难的

作者: 贝一平 | 来源:发表于2018-05-12 08:15 被阅读40次

    (一) 初始化

    //安装命令行工具
    cnpm install -g wepy-cli
    //初始化项目
    wepy init standard projectname
    cd projectname
    cnpm install
    cnpm build --watch
    

    首先说,我们要写样式,但现在写样式已经不单纯是写css那么简单了,你需要使用css预处理器,选择有很多scss,less,stylus,PostCss都可以。我这次选择的是stylus。

    在wepy中怎么使用stylus的语法写样式呢?

    在.wpy文件中的style标签的lang属性设定即可

    <style lang="stylus"></style>
    

    假如我们设置的正确,那么下面这段在项目生成的index.wepy中修改的代码是应该可以看到效果的

      .userinfo
        display: flex
        flex-direction: column
        align-items: center
        border: solid 5rpx blue
    

    结果真是不如人意。

    编译失败

    不过也还好,至少这个报错,还是让人有点眉目的。
    修改wepy.config.js

    compilers: {
        stylus:{
          compress:prod
        }
    }
    

    安装所缺少的wepy-compiler-stylus

    cnpm install wepy-compiler-stylus --save-dev
    

    然后我们再执行,得到结果

    2018-05-09_11-37-53.png

    这么看来,要想在wepy里使用stylus只有三个步骤

    1. 修改wpy文件的style-lang
    2. 修改wepy.config.js的compilers
    3. 安装wepy-compiler-stylus

    (二)为项目引入Mock

    由于项目后还还没有搭建好,我们这里先使用mock来模拟一下数据。
    当然关于mock的选择也有很多,这里我们选择的是Easy-Mock

    1.首先你要去Easy-Mock创建一个项目(此步骤略过)

    2.创建接口

    创建一个接口的正确步骤

    首先,你先要了解下Mock.js的语法,毕竟Easy-Mock是mock的升级版。
    我们把Mock官网上的例子复制到Easy-Mock试试,看得到什么结果

    {
      "data": {
        // 属性 list 的值是一个数组,其中含有 1 到 10 个元素
        'list|1-10': [{
          // 属性 id 是一个自增数,起始值为 1,每次增 1
          'id|+1': 1
        }]
      }
    }
    

    思考这个接口你会得到什么样的结果,list数组是得到固定的10个数据,还是1-10之间随机的数据?

    使用Easy-Mock.png

    先点更新,更新接口,然后再预览,预览时多刷新几次,你就会发现每次的到的list的数组长度都不一样。

    怎么使用呢?
    回到接口列表页面,选择复制接口地址。


    使用接口

    (三)初次使用,一切从简

    首页功能模块划分
    首页 = banner + panel(=title+list)
    我们先看看怎么实现一个banner吧。

    在wepy中我们应该如何使用小程序的原生组件?

    原本在原生的小程序里面呢,是有个十分简易的轮播组件可供我们使用的,但是换到了wepy框架,我们还能使用原生组件吗?
    当然是可以的!!!

    你仔细看看初始化的index文件就知道了。其实能不能使用原生的组件不是重点,重点是怎么给原生的组件传值?

    换句话说就是:
    我们如何请求接口中的轮播图数据?
    又如何将这些数据在组件中展示出来?
    最后又如何为这些轮播图图片绑定事件?

    这三个问题,仔细想,最基础的是什么?是不是怎么将数据展示出来啊!这很重要,数据是否写死不重要,能展示才是最重要的。其次是绑定事件吧,最后才是请求banner数据,并且替换。

    按照这个顺序我们来解决上面的问题。

    <template>
      <view class="banner">
          <swiper scroll-x="true" style=" white-space: nowrap; display: flex" >
              <swiper-item class="bnr-img">
                  <image src="{{banner[0].img}}">
              </swiper-item>
              <swiper-item class="bnr-img">
                  <image src="{{banner[1].img}}">
              </swiper-item>
              <swiper-item class="bnr-img">
                  <image src="{{banner[2].img}}">
              </swiper-item>
          </swiper>
      </view>
    </template>
    <script>
       data = {
          // banner数据
          banner: [
            {
              img: '/assets/images/test.jpeg',
              url: '1'
            },
            {
              img: '/assets/images/timg.jpeg',
              url: '2'
            },
            {
              img: '/assets/images/dimg.jpg',
              url: '3'
            }
          ]
        }
    </script>
    

    现在就要注意一个问题了,我们这么写虽然能得出结果,但是并不好,在原生小程序中可以使用wx:for循环出图片,那么:

    在wepy框架中如何实现for循环?

    在wepy中要想实现原生的wx:for循环,就需要使用<repeat>。

        <view class="banner">
          <swiper scroll-x="true" style=" white-space: nowrap; display: flex" >
            <repeat for="{{banner}}" key="bnr" index="index" item="item">
              <swiper-item class="bnr-img">
                <image src="{{item.img}}"></image>
              </swiper-item>
            </repeat>
          </swiper>
        </view>
    

    到现在为止,我觉得大部分的内容我们都已经解决了。
    现在我们来实现点击图片跳转到相应的页面,那么

    如何为图片添加点击事件呢?

    wepy事件绑定.png

    手册中说的也很清楚,对于事件绑定,含参和不含参的都做了说明。
    那么我们就分别实践一下。

    1-不含参:点击图片弹出提示框

          tap () {
            wx.showModal({
              title: '提示',
              content: '这是一个模态弹窗',
              success: function(res) {
                if (res.confirm) {
                  console.log('用户点击确定')
                } else if (res.cancel) {
                  console.log('用户点击取消')
                }
              }
    })
          },
    

    简单的试了,一下,这么写我们只是测试不传参的情况,实际上调用wx
    原生的组件在wepy1.7.2之前还是会报错的。

    2-含参

    我们接着再来实践一个带着参数的,点击图片打印出相应需要跳转的url

    <template>
       <swiper-item class="bnr-img" @tap="tap({{item.url}})">
           <image src="{{item.img}}"></image>
       </swiper-item>
    </template>
    <script>
          tap (url) {
           console.log(url);
          },
    </script>
    

    大概就简单的试了试这些内容。
    最后我们要进行请求的测试和练习。

    在wepy中如何进行请求呢?

    这次我们不要写死banner广告,毕竟不可能没换次广告就要重新上个新版本,你要知道小程序的上传都是要碰运气的。

    讲一下,关于点击图片发送请求的问题:
    指路:https://tencent.github.io/wepy/document.html#/?id=page%E9%A1%B5%E9%9D%A2%E5%AE%9E%E4%BE%8B%E5%92%8Ccomponent%E7%BB%84%E4%BB%B6%E5%AE%9E%E4%BE%8B

    注意,对于WePY中的methods属性,因为与Vue中的使用习惯不一致,非常容易造成误解,这里需要特别强调一下:WePY中的methods属性只能声明页面wxml标签的bind、catch事件,不能声明自定义方法,这与Vue中的用法是不一致的。

    这是文档中对于自定方法的说明,我们现在要做的就是需要一个自定义函数来实现我们的数据请求。我们先按照手册上说的试一试。

    自定义事件getData.png

    知道了怎么写自定义事件并成功调用之后,我们要解决的问题就是数据请求了。

    如果你写过原生小程序,我想你一定会被那一层又一层的回调恶心到,不过现在好了,原生小程序也支持promise了。但是wepy更好,它甚至为你提供了async/await。

    但是,一切都是有条件的。
    指路:https://tencent.github.io/wepy/document.html#/?id=%e4%bb%a3%e7%a0%81%e8%a7%84%e8%8c%83

    文档中有详细的说明,要想使用promise等方法,需要先开启promise。
    https://github.com/Tencent/wepy/wiki/wepy%E9%A1%B9%E7%9B%AE%E4%B8%AD%E4%BD%BF%E7%94%A8Promise

    也就是说你得按照上面的方法配置下才行。然后分别用promise和async/await实现请求:

        getData(url){
          console.log("测试下");
          wepy.request(url).then((d) => console.log(d));
        }
        async request (url) {
          let d = await wepy.request(url);
          console.log("async-await");
          console.log(d);
        }
    

    结果都是可以的。
    那么经过上面的简单介绍,我们就开始准备实战吧。毕竟做是最好的学。

    相关文章

      网友评论

        本文标题:使用wepy开发小程序-1|简单了解,其实也没什么难的

        本文链接:https://www.haomeiwen.com/subject/oaxnrftx.html