微信小程序 day01

小程序的优势:

1、微信助理,容易推广。在微信中,小程序拥有众多入口,例如附近的小程序、小程序码、分享、发现-小程序等五十多个入口,这些入口有助于企业更好的获取流量,从而进行转化和变现

2、使用便捷

3、体验良好,有接近原生app的体验。h5页面经常出现卡顿、延时、加载慢、权限不足等元音音,而这些问题在小程序里都不会出现

4、成本低,小程序的花费约是APP的十分之一

小程序的不足

1、单个包大小限制为2M,这导致无法开发大型的应用,采用分包最大是16M(这个值一直在变化,以官网为准)

2、需要像app一样审核上架,相对于H5的发布要麻烦一些

3、处处受微信限制,例如不能直接分享到朋友圈,涉及到积分或者虚拟交易的时候,小程序也是不允许的

项目的目录结构

pages:

        wxml:编写小程序界面结构的地方

        wxss:编写小程序样式的地方

        json:编写界面配置的地方

        js:编写界面逻辑的地方

utils:编写工具类的地方

app.js:创建程序实例的地方

app.json:编写全局配置地方

app.wxss:编写全局样式的地方

project.config.json:项目的配置文件

sitemap.json配置那些网站可以呗检索到

tabbar设置在app.json中,图片只能用本地地址,不能是线上地址

 "tabBar": {
    "list": [{
      "pagePath": "pages/index/index",
      "text": "首页",
      "iconPath": "assets/icons/index.png",
      "selectedIconPath": "assets/icons/index-active.png"
    },{
      "pagePath": "pages/my/index",
      "text": "我的",
      "iconPath": "assets/icons/wode.png",
      "selectedIconPath": "assets/icons/wode-active.png"
    }]
  },

小程序中的组件(标签)

view 相当于html中的div

text相当于html中的span

image 相当于html中的img

其余请看官方文档

https://developers.weixin.qq.com/miniprogram/dev/component/

在小程序中,使用WXML语言通过数据绑定来实现界面数据的更新

1、先在data属性中定义数据

data:{

age:18,

}

2、引用数据

通过{{}}的方式来引用数据

<view>{{age}}</view>

逻辑渲染

在WXML中,使用wx:if="{{}}"来判断是否需要渲染该代码块

data: {
    age:18
  },


<view wx:if="{{age>14}}" hidden="{{age}}">age>20</view>
<view wx:if="{{age>15}}" >age=22</view>
<view wx:elif="{{age>16}}">age=23</view>
<view wx:else>age</view>

其中hidden属性是通过display属性设置为none来进行条件渲染

列表渲染

通过wx-for循环来渲染数组或对象的数据

data: {
    age:18,
    array:[{name:'张三',age:'男'},{name:'lixi',age:'nv'}]
  },



<view wx:for="{{array}}">
{{index}}-{{item.name}}-{{item.age}}
</view>
<view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itm">
{{idx}}-{{itm.name}}-{{itm.age}}
</view>

Template

先创建模板,然后在实例中引用


<view wx:for="{{array}}">
  <template is="msgItem" data="{{...item}}"></template>
</view>
<template name="msgItem">
  <view>
    <text> {{name}}-{{age}} </text>
  </view>
</template>

引用

1、import  <import src="文件地址">

import有作用域的概念,例如:c引入b,b引入a,c只能拿到b中的template,不能拿到a定义的template

2、include  <include  src="文件地址">

include可以将整个文件都拷贝到

小程序中的wxss

小程序中是以rpx为尺寸单位,1rpx=0.5px

样式的导入:

@import  ‘样式文件地址’

小程序目前支持的选择器

 小程序中的js

小程序目前可以运行的三大平台

1、ios平台

2、Android平台

3、小程序IDE

小程序和浏览器渲染数据有什么不同

浏览器中渲染是单线程的

而在小程序中的运行环境分为渲染层和逻辑层,WXML模板和WXSS样式工作在渲染层,js脚本工作在逻辑层

小程序如何渲染数据

1、在WXML模板中使用view标签,用{{}}来绑定一个变量

2、在JS脚本中使用this.setData方法把{{}}中的字串设置出来

程序和界面

小程序指的是产品层面的成熟,而程序值得是代码层面的程序实例

onLaunch:当小程序初始化完成是,会触发onLaunch(全局只触发一次)

onShow:当小程序启动,或从后台进入前台显示,会触发onShow

onHide:当小程序从前台进入后台,会触发onHide

onError:当小程序发生脚本错误,或者API调用失败时,会触发onError并带上错误信息

其他字段:可以添加任意的函数和数据到Object参数中,在App实例回调用this可以访问

生命周期

onLoad:生命周期函数--监听页面加载,触发时机早于onShowonReady

onReady:生命周期函数--监听页面初次渲染完成

onShow:生命周期函数--监听页面显示,触发事件早于onReady

onHide:生命周期函数--监听页面隐藏

onUnload:生命周期函数--监听页面卸载

数据

       WXML可以通过数据绑定的语法绑定从逻辑层传递过来的数据字段,这里所说的数据其实就是来自于页面Page构造器的data字段,data参数是页面第一次渲染时从逻辑层传递到渲染层的数据。

       JS脚本中如果需要获取到data上的数据,需要通过this.data获取。

<!-- page.wxml -->

<view>{{text}}</view>

// page.js

Page({

  data: {

    text: '天亮教育',

  },

onLoad(){

      console.log(this.data.text)

}

})

       如果涉及到更新,这里可以调用Page实例提供的setData把数据传递给渲染层,从而达到更新界面的目的。由于小程序的渲染层和逻辑层分别在两个线程中运行,所以setData传递数据实际是一个异步的过程,所以setData的第二个参数是一个callback回调,在这次setData对界面渲染完毕后触发。

       setData其一般调用格式是 setData(data, callback),其中data是由多个key: value构成的Object对象。

// page.js

Page({

  onLoad: function(){

    this.setData({

      text: 'change data'

    }, function(){

      // 在这次setData对界面渲染完毕后触发

    })

  }

})

注意事项:

  • 直接修改 Page实例的this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致。
  • 由于setData是需要两个线程的一些通信消耗,为了提高性能,每次设置的数据不应超过1024kB
  • 不要把data中的任意一项的value设为undefined,否则可能会有引起一些不可预料的bug

页面的用户行为:

onPullDownRefresh 下拉刷新

监听用户下拉刷新事件,需要在app.jsonwindow选项中或页面配置page.json中设置enablePullDownRefreshtrue。当处理完数据刷新后,wx.stopPullDownRefresh可以停止当前页面的下拉刷新。

onReachBottom 上拉触底

监听用户上拉触底事件。可以在app.jsonwindow选项中或页面配置page.json中设置触发距离onReachBottomDistance。在触发距离内滑动期间,本事件只会被触发一次。

onPageScroll 页面滚动

监听用户滑动页面事件,参数为 Object,包含 scrollTop 字段,表示页面在垂直方向已滚动的距离(单位px)。

onShareAppMessage 用户转发

只有定义了此事件处理函数,右上角菜单才会显示“转发”按钮,在用户点击转发按钮的时候会调用,此事件需要return一个Object,包含titlepath两个字段,用于自定义转发内容,如代码清单3-13所示。

// page.js

Page({

onShareAppMessage: function () {

 return {

   title: '自定义转发标题',

  // 自定义点击链接需要跳转的页面,默认当前页面

   path: '/page/user?id=123'

 }

}

})

10. 事件

事件定义

在小程序中绑定事件可以以bind开头然后跟上事件的类型,如bindtap绑定一个点击事件,对应的值是一个字符串,需要在page构造器中定义同名函数,每次触发事件之后就会执行对应函数的内容。

<view bindtap="handleTap">点击事件</view>

<view bind:tap="handleTap">另一种写法</view>

// pages/my/index.js

Page({

  handleTap(){

    console.log("执行了点击事件");

  }

})

常见的事件类型

  • touchstart     手指触摸动作开始
  • touchmove   手指触摸后移动
  • touchcancel  手指触摸动作被打断,如来电提醒,弹窗
  • touchend      手指触摸动作结束
  • tap  手指触摸后马上离开
  • longpress     手指触摸后,超过350ms再离开,如果指定了事件回调函数并触发了这个事件,tap事件将不被触发
  • longtap  手指触摸后,超过350ms再离开(推荐使用longpress事件代替)
  • transitionend 会在 WXSS transition wx.createAnimation 动画结束后触发
  • animationstart    会在一个 WXSS animation 动画开始时触发
  • animationiteration     会在一个 WXSS animation 一次迭代结束时触发
  • animationend      会在一个 WXSS animation 动画完成时触发

阻止事件冒泡

       在小程序中除了通过bind之外,还可以通过catch进行事件绑定,通过catch绑定的事件不会触发事件冒泡。

事件捕获

       事件的触发分为两个阶段,首先是捕获阶段,其次是冒泡阶段。默认情况下事件都是在冒泡阶段触发。如果希望事件可以在捕获阶段触发,可以通过capture-bind进行事件绑定。

事件传参

       在小程序中进行事件传参不能像传统的Web项目中一样,在括号里写参数。在小程序中需要在标签上通过data-方式定义事件所需的参数。

<!-- data-参数名=’参数值’ -->

<view bindtap="handleTap" data-msg="我是事件的参数">点击事件</view>

       每个事件回调触发时,都会收到一个事件对象,通过这个对象可以获取路由传递的参数。

handleTap(e){

console.log("执行了点击事件");

// 通过currentTarget中的dataset属性可以获取时间参数

    console.log(e.currentTarget.dataset.msg);

}

关于这个事件对象其他属性

  • type 事件类型
  • timeStamp   页面打开到触发事件所经过的毫秒数
  • target     触发事件的组件的一些属性值集合
  • currentTarget      当前组件的一些属性值集合
  • detail     额外的信息
  • touches  触摸事件,当前停留在屏幕中的触摸点信息的数组
  • changedTouches 触摸事件,当前变化的触摸点信息的数组

这里需要注意的是targetcurrentTarget的区别,currentTarget为当前事件所绑定的组件,而target则是触发该事件的源头组件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值