当前位置:首页 > 新闻动态 > 网站文章

「微信小程序每日学习记录02」模板与配置

来源: 浏览:156 时间:2023-07-27

二、模板与配置2.1 WXML 模板语法2.1.1 数据绑定1. 数据绑定的基本原则

  • 在 data 中定义数据
  • 在 WXML 中使用数据

2. 在 data 中定义页面的数据

在页面对应的 .js 文件中,把数据定义到 data 对象中即可:

 // pages/list/list.js
 Page({
     /**
      * 页面的初始数据
      */
     data: {
         // 字符串数据
         info: 'init data',
         // 数组类型数据
         msgList: [{msg: 'hello'},{msg: 'world'}]
     }
 })

注意:js文件初始化数据时无需数据格式

3. Mustache 语法的格式

把data中的数据绑定到页面中渲染,使用 Mustache 语法(双大括号)将变量包起来即可。语法格式为:

 {{ 要绑定的数据名称 }}

4. Mustache 语法的应用场景

  • 绑定内容
  • 绑定属性
  • 运算(三元运算、算术运算等)

5. 动态绑定内容

 // pages/list/list.js
 Page({
     /**
      * 页面的初始数据
      */
     data: {
         // 字符串数据
         info: 'init data'
     }
 })
 {{ info }}

6. 动态绑定属性

 // pages/list/list.js
 Page({
/**
      * 页面的初始数据
      */
     data: {
         // 图片网址数据
         imgSrc: "http://www.itheima.com/images/logo.png"
     }
 })
 

7. 三元运算

 // pages/list/list.js
 Page({
/**
      * 页面的初始数据
      */
     data: {
         // 生成 10 以内的随机数
         randomNum: Math.random() * 10
     }
 })
 {{ randomNum >= 5 ? '大于等于5' : '小于5' }}

8. 算数运算

 // pages/list/list.js
 Page({
/**
      * 页面的初始数据
      */
     data: {
         // 生成一个带两位小数的随机数
         randomNum2: Math.random().toFixed(2)
     }
 })
 生成100以内的随机数:{{ randomNum2 * 100 }}

2.1.2 事件绑定1. 事件

事件是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务的处理

2. 常用事件

类型

绑定方式

事件描述

tap

bindtap 或 bind:tap

手指触摸后马上离开,类似于 HTML 中的click 事件

input

bindinput或bind:input

文本库框的输入事件

change

bindchange 或 bind:change

状态改变时触发

/div>3. 事件对象的属性列表

p data-track="48">当事件回调触发的时候,会收到一个事件对象 event ,其详细属性如下:

/p>

div>

属性

类型

说明

type

String

事件类型

timeStamp

Integer

页面打开到触发时间所经过的毫秒数

target

Object

触发事件的组件的一些属性值集合

currentTarget

Object

当前组件的一些属性值集合

detail

Object

额外的信息

touches

Array

触摸事件,当前停留在屏幕中的触摸点信息的数组

changedTouches

Array

触摸事件,当前变化的触摸点信息的数组

/div>

li data-track="77">e.target 指向的是触发事件的源头组件,因此,e.target 是内部的按钮组件

/li>

li data-track="78">e.currentTarget 指向的是当前正在触发事件的那个组件,因此,e.currentTarget 是当前的 view 组件

/li>

li data-track="81">通过 bindtap ,可以为组件绑定 tap 触摸事件

/li>

li data-track="82">

/li>

li data-track="83">在页面的 .js 文件中定义对应的事件处理函数,事件参数通过形参 event(一般简写成 e) 来接收

/li>

li data-track="84">Page({


// 按钮的 tap 事件处理函数


btnTapHandler(e){


// 事件参数对象 e


console.log(e)


}


})

/li>

code>// 页面的 .js 文件 Page({ data: { count:0 }, // 修改 count 的值,每点击一次,累加一次 changeCount(){ this.setData({ count: this.data.count + 1 }) console.log(this.data.count); } })

/code>

code>

/code>

code>

/code>

code>

/code>

code>btnHandler(event){ // dataset 是一个对象,包含了所有通过 data-* 传递过来的参数项 console.log(event.target.dataset); // 通过 dataset 可以访问到具体参数的值 console.log(event.target.dataset.info); }

/code>

code>

/code>

code>inputHandler(e){ // e.detail.value 是变化过后,文本框最新的值 console.log(e.detail.value); }

/code>

li data-track="110">定义结构

/li>

code>Page({ data: { msg:'你好' } })

/code>

li data-track="112">渲染结构

/li>

code>

/code>

li data-track="114">美化样式

/li>

code>input{ border: 1px solid #eee; padding: 5px; margin: 5px; border-radius: 3px; }

/code>

li data-track="116">绑定 input 事件处理函数

/li>

code>iptHandler(e){ this.setData({ // 通过 e.detail.value 获取到文本框最新的值 msg: e.detail.value; }) }

/code>

code>True

/code>

code> 保密

/code>

code> view1 view2

/code>

p data-track="128">

注意:

并不是一个组件,只是一个包裹性质的容器,不会在页面中做任何渲染

/p>

code>

/code>

li data-track="133">运行方式不同

/li>

ul>

  • wx:if 以 动态创建和移除元素的方式 ,控制元素的展示与隐藏
  • hidden 以 切换样式 的方式 (display:none/block) ,控制元素的显示与隐藏
  • /ul>

    li data-track="136">使用建议

    /li>

    ul>

  • 频繁切换时,建议使用 hidden
  • 控制条件复杂时,建议使用 wx:if 搭配 wx:elif、wx:else 进行展示与隐藏的切换
  • /ul>

    code> 索引是:{{index}}, 当前项是:{{item}}

    /code>

    li data-track="147">使用 wx:for-index 可以指定当前循环项的索引的变量名

    /li>

    li data-track="148">使用 wx:for-item 可以指定当前项的变量名

    /li>

    code> 索引是:{{idx}}, 当前项是:{{itemName}}

    /code>

    strong>:key

    /strong>,小程序在实现列表渲染时,也建议为渲染出来的列表项指定唯一的 key 值,从而提高渲染的效率

    code>// data 数据 data:{ userList:[ {id:1, name:'小红'}, {id:2, name:'小黄'}, {id:3, name:'小蓝'} ] }

    /code>

    code>{{item.name}}

    /code>

    li data-track="165">rpx 尺寸单位

    /li>

    li data-track="166">@import 样式导入

    /li>

    li data-track="172">在较小的设备上,1rpx 所代表的宽度较小

    /li>

    li data-track="173">在较大的设备上,1rpx 所代表的宽度较大

    /li>

    li data-track="177">750rpx = 375px = 750 物理像素

    /li>

    li data-track="178">1rpx = 0.5px = 1物理像素

    /li>

    div>

    设备

    rpx换算px(屏幕宽度/750)

    px换算rpx(750/屏幕宽度)

    iPhone5

    1rpx = 0.42px

    1px = 2.34rpx

    iPhone6

    1rpx = 0.5px

    1px = 2rpx

    iPhone6 Plus

    1rpx = 0.552px

    1px = 1.81rpx

    /div>

    div>

    /table>

    table>

    /colgroup>

    tbody>

    /tbody>

    colgroup>

    col/>

    col/>

    col/>

    col/>

    tr>

    /tr>

    tr>

    /tr>

    tr>

    /tr>

    tr>

    /tr>

    tr>

    /tr>

    td>

    属性名

    /td>

    td>

    类型

    /td>

    td>

    默认值

    /td>

    td>

    说明

    /td>

    td>

    navigationBarTitleText

    /td>

    td>

    String

    /td>

    td>


    /td>

    td>

    当前页面导航栏标题文字内容

    /td>

    td>

    navigationBarBackgroundColor

    /td>

    td>

    HexColor

    /td>

    td>

    #000000

    /td>

    td>

    当前页面导航栏背景颜色

    /td>

    td>

    navigationBarTextStyle

    /td>

    td>

    String

    /td>

    td>

    white

    /td>

    td>

    当前页面导航栏标题颜色,仅支持 black/white

    /td>

    td>

    backgroundColor

    /td>

    td>

    HexColor

    /td>

    td>

    #ffffff

    /td>

    td>

    当前页面窗口的背景颜色

    /td>

    td>

    backgroundTextStyle

    /td>

    td>

    String

    /td>

    td>

    dark

    /td>

    td>

    当前页面下拉 loading 的样式,仅支持 dark/light

    /td>

    td>

    enablePullDownRefresh

    /td>

    td>

    Boolean

    /td>

    td>

    fasle

    /td>

    td>

    是否为当前页面开启下拉刷新

    /td>

    td>

    onReachBottomDistance

    /td>

    td>

    Number

    /td>

    td>

    50

    /td>

    td>

    页面上拉触底事件触发时距页面底部的距离,单位为px

    /td>

    属性名

    类型

    默认值

    说明

    navigationBarTitleText

    String

    字符串

    导航栏标题文字内容

    navigationBarBackgroundColor

    HexColor

    #000000

    导航栏背景颜色

    navigationBarTextStyle

    String

    white

    导航栏标题颜色,仅支持 black/white

    backgroundColor

    HexColor

    #ffffff

    窗口的背景颜色

    backgroundTextStyle

    String

    dark

    下拉 loading 的样式,仅支持 dark/light

    enablePullDownRefresh

    Boolean

    fasle

    是否全局开启下拉刷新

    onReachBottomDistance

    Number

    50

    页面上拉触底事件触发时距页面底部的距离,单位为px

    属性

    类型

    必填

    默认值

    描述

    position

    String

    bottom

    tabBar 的位置,仅支持 bottom/top

    borderStyle

    String

    black

    tabBar 上边框的颜色,仅支持 black/white

    color

    HexColor


    tab 上文字的默认(未选中)颜色

    selectedColor

    HexColor


    tab 上的文字选中时的颜色

    backgroundColor

    HexColor


    tabBar 的背景色

    list

    Array


    tab 页签的列表,最少2个,最多5个 tab

    属性

    类型

    必填

    描述

    pagePath

    String

    页面路径,页面必须在 pages 中预先定义

    text

    String

    tab 上显示的文字

    iconPath

    String

    未选中时的图标路径,当 postion 为 top 时,不显示 icon

    selectedIconPath

    String

    选中时的图标路径;当 postion 为 top 时,不显示 icon

    与全局配置中window的配置项一样

    2.5 网络数据请求2.5.1 小程序中网络数据请求的限制

    出于安全性方面的考虑,小程序官方对数据接口的请求做出了如下两个限制:

    • 只能请求 HTTPS 类型的接口
    • 必须将接口的域名添加到信任列表中
    2.5.2 配置 request 合法域名

    需求描述:假设在自己的微信小程序中,希望请求 https://www.escook.cn/ 域名下的接口

    配置步骤:登录微信小程序管理后台 -> 开发 -> 开发设置 -> 服务器域名 -> 修改 request 合法域名

    注意事项:

    域名只支持 https 协议-

    域名不能使用 IP 地址或 localhost

    域名必须经过 ICP 备案

    2.5.3 发起 GET 请求

    调用微信小程序提供的 wx.request() 方法,可以发起 GET 数据请求

     wx.request({
          //  请求的接口地址,必须基于 https 协议
           url: 'https://www.escook.cn/api/get',
         //   请求的方式
           method: 'GET',
         //   发送到服务器的数据
           data:{
               name:'chenmo',
               age:20
           },
         //   请求成功之后的回调函数
           success:(res) => {
               console.log(res);
           }
     })

    使用 wx.request() 需要在函数方法内使用

    2.5.4 发起 POST 请求
     wx.request({
             //  请求的接口地址,必须基于 https 协议
           url: 'https://www.escook.cn/api/post',
         //   请求的方式
           method: 'POST',
         //   发送到服务器的数据
           data:{
               name:'chenmo',
               age:20
           },
         //   请求成功之后的回调函数
           success:(res) => {
               console.log(res);
           }
     })
    2.5.5 在页面刚加载时请求数据

    在很多情况下,我们需要在页面刚加载的时候,自动请求一些初始化的数据。此时需要在页面的 onLoad 事件中调用获取数据的函数

    示例代码如下:

    2.6 案例-本地生活(首页)2.6.1 首页效果以及实现步骤
    • 新建项目并梳理项目结构
    • 配置导航栏效果
    • 配置 tabBar 效果
    • 实现轮播图效果
    • 实现九宫格效果
    • 实现图片布局


    2.6.2 接口地址
    • 获取轮播图数据列表的接口:【GET】https://www.escook.cn/slides
    • 获取九宫格数据列表的接口:【GET】https://www.escook.cn/categories

    需要依据具体的键名进行编写 wxml 的代码

    2.6.3 示例代码
     // pages/home/home.js
     Page({
    /**
          * 页面的初始数据
          */
         data: {
             // 轮播图数组
             swiperList: [],
             // 九宫格数组
             gridList: []
         },
    /**
          * 生命周期函数--监听页面加载
          */
         onLoad(options) {
             this.getSwiperList();
             this.getGridList();
         },
    /* 获取轮播图数据 */
         getSwiperList(){
             wx.request({
               url: 'https://www.escook.cn/slides',
               method:'GET',
               success:(res) => {
                 this.setData({
                     swiperList: res.data
                 })
               }
             })
         },
    /* 获取九宫格数据 */
         getGridList(){
             wx.request({
               url: 'https://www.escook.cn/categories',
               method: 'GET',
               success:(res)=>{
                   this.setData({
                       gridList: res.data
                   })
               }
             })
         }
     })
     /* pages/home/home.wxss */
     swiper{
         height: 350rpx;
     }
    swiper image {
         width: 100%;
         height: 100%;
       }
    .grid-list{
         display: flex;
         flex-wrap: wrap;
         border-left: 1rpx solid #efefef;
         border-top: 1rpx solid #efefef;
     }
    .grid-item{
         width: 33%;
         height: 200rpx;
         display: flex;
         flex-direction: column;
         align-items: center;
         justify-content: center;
         border-right: 1rpx solid #efefef;
         border-bottom: 1rpx solid #efefef;
         box-sizing: border-box;
     }
    .grid-item image{
         width: 60rpx;
         height: 60rpx;
     }
    .grid-item text{
         font-size: 24rpx;
         margin-top: 10rpx;
     }
    .img-box{
         display: flex;
         padding: 20rpx 20rpx;
         justify-content: space-around;
     }
    .img-box image{
         width: 45%;
     }
     
     
     
         
             
         
     
     
     
         
             
             {{item.name}}
         
      
    
     
         
         
     



    地址 · ADDRESS

    地址:建邺区新城科技园嘉陵江东街18号2层

    邮箱:309474043@qq.Com

    点击查看更多案例

    联系 · CALL TEL

    400-8793-956

    售后专线:025-65016872

    业务QQ:309474043    售后QQ:1850555641

    ©南京安优网络科技有限公司 版权所有   苏ICP备12071769号-4  网站地图