从0到1完成小程序开发

Posted 把番茄沉入海底

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从0到1完成小程序开发相关的知识,希望对你有一定的参考价值。

一,数据的绑定

一个页面只有静态数据往往是不够的,大部分情况下需要在小程序运行的过程中,动态的从服务器端去获取,然后再渲染输出到这个视图中进行显示。

之前的页面为硬解码的方式

  <view class="usermotto">
    <text style="font-size:60rpx">今日推荐:恋爱循环</text>
    <image class="img" src="/imgs/banner.png"></image>
    <text class="text">推荐精彩点评:</text>
    <text class="text">问世间情为何物,执教人生死相许</text>
    <view>
      <text>豆瓣评分:{{score}}</text>
    </view>
  </view>

这样的页面只能用来展示,如果数据变更会很不方便,所以需要用到数据绑定。

在小程序框架中,每个页面所需要的各种数据,都是集中在这个页面所注册的页面对象中进行定义

在当前页面的js文件中通过调用page函数来给这个页面注册所需要的对象函数。

比如我需要给下面的页面添加数据绑定。

 

 

 在这个页面文件夹下的脚本文件中的data属性中定义一个movie的数据:

Page({

  /**
   * 页面的初始数据
   */
  data: {//通过data属性来给页面定义各种需要的数据
    imovie:{
      name:\'恋爱循环\',
      img:\'/imgs/banner.png\',
      comment:\'问世间,情为何物,直教生死相许\'
    }
  }

在小程序中用{{}}来对数据进行绑定。

  <view class="usermotto">
    <text style="font-size:60rpx">今日推荐:{{imovie.name}}</text>
    <image class="img" src="{{imovie.img}}"></image>
    <text class="text">推荐精彩点评:</text>
    <text class="text">{{imovie.comment}}</text>
    <view>
      <text>豆瓣评分:</text>
    </view>
  </view>

在上面代码中标题的名字,图片的路径,评论的语句都使用{{数据对象.数据名}}来放到相应的位置。

在{{}}中可以使用表达式

例如:创建一个数据名为score 和number数据变量

  data: {//通过data属性来给页面定义各种需要的数据
    imovie:{
      name:\'恋爱循环\',
      img:\'/imgs/banner.png\',
      comment:\'问世间,情为何物,直教生死相许\'
    },
    number:18,//创建一个数字为18
    score:58//创建一个评分数为58
  },

在WXML中使用表达式相加

 <text>豆瓣评分:{{score + number}}</text>

页面展示为76。

 

 在例如如果相加的和超过或者等于60的时候显示及格否则显示为不及格。

<text>豆瓣评分:{{(score + number>=60)?"及格":"不及格"}}</text>

为true显示及格

 

 在调试框的AppData中可快速找到对应的内部变量和取值。

 

 可以快速修改取值,当你修改后脚本内数据也会变化。

二,条件渲染

类似于编程语言中的条件语句,只有当某种条件成立的时候组件才会渲染生成。

使用WX:if做数据绑定来实现条件成立后组件渲染生成

小例子:

    <view wx:if="{{recommend}}">
    <text style="color:red;">强烈推荐</text>
    </view>

当recommend为false时,不渲染这段话,当recommend为true时渲染。

 条件成立时渲染了这个视图。

 也可以用 wx:elif 和 wx:else 来添加一个 else 块:

 

 

<view wx:if="{{length > 5}}"> 1 </view>
<view wx:elif="{{length > 2}}"> 2 </view>
<view wx:else> 3 </view>

使用条件渲染与使用hidden属性有什么区别

    <view hidden="{{recommend}}">//使用hidden属性
    <text style="color:red;">强烈推荐</text>
    </view>
recommend:true//hidden和if不同它是要取反的

 

 使用hidden属性时,,这个元素总是要先被渲染生成的。hidden属性只是控制了它的可见性而已。

从使用的角度该如何选择?

使用hidden属性时,当控制条件发生切换,其节点数时没有任何变化的。所以它的开销会比较小,但是它的初始化开销会比较大。

当使用条件渲染的时候,当渲染条件发生切换的时候,其节点数会有对应的变化。所以对于可见性需要频繁切换的时候,我们就不建议使用条件渲染。因为它的开销会比较大。

三,列表渲染

列表渲染类似于编程语言中的循环语句。它重复的来渲染生成组件。

通过wx:for属性来实现列表渲染。

首先需要将之前的recommend页的内容修改为一个紧凑的块状的展示界面。

.recommend{
  display: flex;
}
.recommend-content{
  display: flex;
  flex-direction: column;
}
.img{
  width: 30vh;
  height: 20vh;
}
.font-title{
  font-size: 20px;
  color: hotpink;
}
   <view class="font-title">
   <text>本周推荐</text>
   </view>
  <view class="recommend">
    <image class="img" src="{{imovie.img}}"></image>
    <view class="recommend-content">
    <text>{{imovie.name}}</text>
    <text class="text">推荐精彩点评:{{imovie.comment}}</text>
    <text>{{(number + score>=80)?"分数优秀":"分数低"}}</text>
    <text style="color:red;">强烈推荐</text>
    <view hidden="{{recommend}}">
    </view>
    </view>
  </view>

 

 假如需要在这个页面上展示许多个块状界面

第一步,需要把脚本文件内的imovie数据更改为数据对象。

  data: {//通过data属性来给页面定义各种需要的数据
    imovie:[
    {
      name:\'恋爱循环\',
      img:\'/imgs/banner.png\',
      comment:\'论世间情为核武,直教人生死相许\',
    },
      {
        name: \'恋爱循环2\',
        img: \'/imgs/banner.png\',
        comment: \'论世间情为核武,直教人生死相许\',
      },
      {
        name: \'恋爱循环3\',
        img: \'/imgs/banner.png\',
        comment: \'论世间情为核武,直教人生死相许\',
      }],
    number:18,
    score:78,
    recommend:true
  },

在页面的视图中插入wx:for属性

<view class="recommend" wx:for="{{imovie}}">

这里不需要固定取出数组内某一个数据,需要有一个抽象的item概念。

   <view class="font-title">
   <text>本周推荐</text>
   </view>
  <view class="recommend" wx:for="{{imovie}}">
    <image class="img" src="{{item.img}}"></image>
    <view class="recommend-content">
    <text>{{item.name}}</text>
    <text class="text">推荐精彩点评:{{item.comment}}</text>
    <text>{{(number + score>=80)?"分数优秀":"分数低"}}</text>
    <text style="color:red;">强烈推荐</text>
    <view hidden="{{recommend}}">
    </view>
    </view>
  </view>

 

 这个时候就通过对imovie中的每一个值item的遍历和对应的渲染生成这个元素。

如何查看这是第几个渲染的值?

框架中所内置的index值是这个数组的下标,从0开始。

可以进行数据绑定来实现显示第几天推荐。

<text>第{{index + 1}}天:{{item.name}}</text>

但是index的值从0开始 所以要index+1

 使用swiper组件(轮播图效果)

使用swiper组件添加一个轮播图效果,使用方法如下:

  <view>
    <swiper style="background: #eee">
      <swiper-item>123</swiper-item>
      <swiper-item>456</swiper-item>
      <swiper-item>789</swiper-item>
    </swiper>
  </view>

swiper元素用来表示一个滑动容器。常用来实现幻灯片轮播或者轮播图效果。其中每一页幻灯片都是通过swiper-item元素来表示的。

 

 

 现在给swiper元素添加上图片:

  <view>
    <swiper style="background: #eee">
      <swiper-item>
        <text>王牌对王牌</text>//文字标题
        <image src="https://p.ssl.qhimg.com/t01b0121d51643a361c.jpg"></image>
      </swiper-item>
      <swiper-item>
        <text>朋友请听好</text>//文字标题
        <image src="https://p.ssl.qhimg.com/t01f92341c61300cc74.jpg"></image>
      </swiper-item>
      <swiper-item>
        <text>特工007</text>//文字标题
        <image src="https://p.ssl.qhimg.com/t01c55c28fa53f1d79b.jpg"></image>
      </swiper-item>
    </swiper>
  </view>

 

 

 由于高度不够所以导致图片没用显示完整。添加高度样式。

 

 

 

 现在显示正常。那么问题来了 如何把之前的列表渲染为swiper幻灯片元素呢。

 

 

 看代码

把原来的view元素改为swoper-item元素即可

   <swiper>
    <swiper-item class="recommend" wx:for="{{imovie}}">
      <image class="img" src="{{item.img}}"></image>
      <view class="recommend-content">
      <text>第{{index + 1}}天:{{item.name}}</text>
      <text class="text">推荐精彩点评:{{item.comment}}</text>
      <text>{{(number + score>=80)?"分数优秀":"分数低"}}</text>
      <text style="color:red;">强烈推荐</text>
    </view>
      </swiper-item>
  </swiper>

现在给列表幻灯片添加一些样式优化。

添加列表指示:

 <swiper indicator-dots="{{true}}">

如果希望幻灯片的每一页都露出一部分的效果,引起用户触摸交互。

对swiper元素设置previous-marginnext-margin来实现

<swiper class="swiper" previous-margin="25px" next-margin="25px">//上一页露出25像素内容。下一页露出25像素内容

修改默认显示的幻灯片为第x页。

在swiper标签中添加current="x"

   <swiper indicator-dots="{{true}}" current="1">

既默认显示为第一页。

更新数据

this.setData()方法

  • 小程序并没有提供类似DOM的JS API来直接更新视图
  • this.setData()方法-更新数据并让框架自动更新相关视图
  • 更新是增量式的
  • 单向绑定

 在小程序中对内部状态数据进行更新,不能采用直接赋值写入的方式。必须通过调用小程序提供的this.setData()这个方法

下面来看一下实例 ,实现一个点击按钮更新视图文字的功能。

<text style="color:red;">推荐分数 : {{count}}</text> 
 <view>
  <button bindtap="fnumb" style="height:40px">

以上是关于从0到1完成小程序开发的主要内容,如果未能解决你的问题,请参考以下文章

从0到1完成微信小程序开发

微信小程序开发从0到1~入门篇

微信小程序开发之代码提示插件(VSCode)

跟我一起,利用bitcms内容管理系统从0到1学习小程序开发:上传图片到服务器

1.2 小程序开发文档与开发工具

小程序开发快速上手快速入门篇