双线程模型

像 Vue 的双向数据绑定

总结:

  1. 在渲染层将wxml文件与wxss文件转成js对象,也就是虚拟的dom
  2. 逻辑层生成数据,把数据与虚拟的dom相结合,得到真实的dmo,然后在交给渲染层渲染
  3. 当有数据变化的时候,逻辑层负责更新数据,js对象发生改变,这种改变方式采用的是diff算法进行比较,只改变,变化的部分
  4. 将更新的数据,进行反馈,再次得到虚拟的dmo中,从而更新页面。

小程序的启动流程

小程序中 app.js 中的生命周期

app.js 小程序全局只有一个App对象

// 下文中所说的后台是指:用户将小程序切换到手机的后台运行。这种操作我们叫做从前台切换到后台。和我们平时开发中的后台没有关系

//下文中所说的前台是指:用户将小程序重手机后台运行,调用到用户手机的显示界面,我们叫做从后台切换到前台。

App({

  /*
当小程序初始话完成,会触发onlaunch(全局只触发一次),onlaunch在手机后台到前台切换是不会执行的。
如果要他再次执行,除非在手机中关闭(关闭不是切换到后台,而是直接删除小程序的后台运行)小程序,然后重新打开,才能执行,
*/
onLaunch: function () { console.log("小程序的初始话:onlaunch")
},
/**
* 当小程序启动,或者是重后台进入到前台的时候,会执行onshow,
* 那我们可以通过这个option中的scene值来判断不同进入场景
*/
onShow:function(option){
console.log("小程序onshow,:onShow",option)
},
/*小程序重前台进入到后台的时候,会触发:onHide*/
onHide:function(){
console.log("小程序重前台进入到后台的时候,会触发:onHide") },
/**可以在全局使用 */
globalData: {
userInfo: null
}
})

执行App.js生命周期的时候以及在整个App对象我们可以做什么?

  1. 在注册 app 时候,我们可以通过 onshow 来判断用户进入小程序的场景
  2. 我们可以在生命周期函数中,做一些数据请求。
  3. 我们可以在 app 中设置一个全局的对象,让所有的页面都可以使用,比如上面的globalData

小程序的页面的生命周期


// pages/test/test.js
Page({ /**
* 页面的初始数据
*/
data: {
msg:'own is sb',
}, /**
* 生命周期函数--监听页面加载,页面如果不关闭,这个onload只执行一次
*/
onLoad: function (options) {
console.log("onLoad")
}, /**
* 生命周期函数--监听页面显示,页面从底下切到上面的时候也会执行
*/
onShow: function () {
console.log("onShow")
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
console.log("onHide")
}, /**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
console.log("onHide")
}, /**
* 生命周期函数--监听页面初次渲染完成,这个真实dom要渲染的时候,就会执行
*/
onReady: function () { }, /**
* 页面相关事件处理函数--监听用户下拉动作,如果你要监听这个动作,然后触发底下的函数的话,你必须"enablePullDownRefresh" :true配置成可以下拉刷新。
*/
onPullDownRefresh: function () {
console.log("onPullDownRefresh")
}, /**
* 页面上拉触底事件的处理函数,如果要成功触发这个事件,必须页面显示不够一页显示
*/
onReachBottom: function () {
console.log("onReachBottom")
}, })

在页面的page对象中可以做哪些事情

  1. 在生命周期函数中,向服务器请求数据
  2. 在 data 中初始话数据,给 wxml 使用
  3. 监听 wxm l事件,绑定对应的事件
  4. 监听页面的上拉,下拉等

小程序的事件

事件绑定

wxml 文件

<!--pages/test1/test1.wxml-->

<view bindtap="click1">我是事件</view>
<button bind:tap="click1" data-name="{{name}}" data-age="18" id="bt">我是按钮</button> <view id="outter" bindtap="click3" data-a="o">外面 <view id="innder" bindtap="click2" data-a="i">
里面
</view>
</view>

js 文件

Page({

  /**
* 页面的初始数据
*/
data: {
name:"owen"
},
//e为事件对象,事件所有产生的数据都在e中
click1:function(e){ console.log("你点我了",e) },
)}

总结:

  1. 响应函数直接写在 page 对象中就可以了,不需要和 vue 一样写在 methods 里面
  2. <view bind:事件名称 = "响应函数的函数名" data-参数名 = "值">
  3. 获取2中传过来的值,在事件对象中。例如:e.currentTarget.dataset中

事件补充

js 文件

// pages/test1/test1.js
Page({ /**
* 页面的初始数据
*/
data: {
name:"owen" },
click1:function(e){
console.log("你点我了",e)
},
click2:function(e){
console.log("里面",e)
},
click3:function(e){
console.log("外面",e)
}, click4:function(e){
console.log("捕获外")
},
click5:function(e){
console.log("捕获中")
},
click6:function(e){
console.log("捕获里")
}
,
click7:function(e){
console.log("冒泡外")
},
click8:function(e){
console.log("冒泡中")
},
click9:function(e){
console.log("冒泡里")
} })

wxml 文件


<!-- capture-bind:tap 事件的捕获,从外面到里面-->
<!-- bind:tap就是事件的冒泡,重里面到外面传递 -->
<view class="outter" capture-bind:tap="click4" bind:tap="click7" data-a="o">外面 <view class="midd" capture-bind:tap="click5" bind:tap="click8" data-a="i">
<view class="innder" capture-bind:tap="click6" bind:tap="click9">
里面
</view> 中间
</view> </view> <!-- 如何阻止事件捕获 将 capture-bind:tap改成 capture-catch:tap-->
<view class="outter" capture-bind:tap="click4" bind:tap="click7" data-a="o">外面 <view class="midd" capture-catch:tap="click5" bind:tap="click8" data-a="i">
<view class="innder" capture-bind:tap="click6" bind:tap="click9">
里面
</view> 中间
</view> </view> <!-- 如何阻止事件冒泡 将bind:tap 改成 catch:tap-->
<view class="outter" capture-bind:tap="click4" bind:tap="click7" data-a="o">外面 <view class="midd" capture-bind:tap="click5" bind:tap="click8" data-a="i">
<view class="innder" capture-bind:tap="click6" catch:tap="click9">
里面
</view> 中间
</view> </view>

wxss 文件

/* pages/test1/test1.wxss */
#outter{
width: 400rpx;
height: 400rpx;
background-color: red;
}
#innder{
width: 200rpx;
height: 200rpx;
background-color: yellow;
} .outter{
width: 600rpx;
height: 600rpx;
background-color: red;
}
.midd{
width: 400rpx;
height: 400rpx;
background-color: blue;
}
.innder{
width: 200rpx;
height: 200rpx;
background-color: yellow;
}

微信小程序生命周期,事件的更多相关文章

  1. 微信小程序生命周期

    微信小程序 生命周期 通俗的讲,生命周期就是指一个对象的生老病死. 从软件的角度来看,生命周期指程序从创建.到开始.暂停.唤起.停止.卸载的过程. 下面从一下三个方面介绍微信小程序的生命周期: 应用生 ...

  2. 微信小程序-生命周期图解

    微信小程序-生命周期图解 小程序生命周期 App 生命周期 https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.htm ...

  3. 微信小程序生命周期——小程序的生命周期及页面的生命周期。

    最近在做微信小程序开发,也发现一些坑,分享一下自己踩过的坑. 生命周期是指一个小程序从创建到销毁的一系列过程. 在小程序中 ,通过App()来注册一个小程序 ,通过Page()来注册一个页面. 首先来 ...

  4. 微信小程序生命周期详解

    文章出处:https://blog.csdn.net/qq_29712995/article/details/79784222 在我看来小程序的生命周期虽然简单,但是他渗透了小程序开发的整个过程,对于 ...

  5. 微信小程序 - 生命周期 - 参数传递

    ​ 现在WEB开发门槛越来越高,不想java 会了就可以有工作,前端不行 ,不仅JavaScript要求不低,基础的HTML+CSS还要扎实,jquery也是必须要会,现在的前端框架 Vue Ng R ...

  6. 浅谈微信小程序生命周期

    之前在做微信小程序的时候,一直对生命周期里面的onLoad,onShow,onUnload不是很理解.比如说什么时候会触发onUnload. 经过一段时间的测试发现,普通页面的onUnload在三种情 ...

  7. 微信小程序 - 生命周期

    生命周期 1.小程序注册完成后,加载页面,触发onLoad方法.(切记,onShow和onLoad的区别,onShow是每当进入这个页面时就会触发,而onload是载入进来时才触发) 2.页面载入后触 ...

  8. 微信小程序生命周期、页面生命周期、组件生命周期

    1. 生命周期 App(全局) 位置:项目根目录app.js文件 App({ onLaunch (options) { // console.log('小程序初始化') }, onShow(optio ...

  9. 微信小程序~生命周期方法详解

    生命周期是指一个小程序从创建到销毁的一系列过程 在小程序中 ,通过App()来注册一个小程序 ,通过Page()来注册一个页面 先来看一张小程序项目结构 从上图可以看出,根目录下面有包含了app.js ...

随机推荐

  1. 「雕爷学编程」Arduino动手做(38)——joystick双轴摇杆模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...

  2. node中几个路径的梳理

    大半夜睡不着... 今天用node写了返回客户端请求资源的http服务,确实发现了一些以前没注意到的问题. 第一个是在接收到请求的时候,解析完路径后,一定要判断请求的文件的后缀,以便选择对应的Cont ...

  3. 【JVM】堆区域的一个详细了解并附带调优案例

    话不多说,直接撸图: 1>Eden中通过可达性分析,存活下来的对象直接通过复制算法移动到From区域中,此时该对象的分代年龄加1: 2>当下一次虚拟机进行[Minor GC]时,会同时对[ ...

  4. python之Phantomjs无界面浏览器引擎自动化测试

    文字搬运工,本文主要介绍PhantomJS功能,其中有屏幕快照功能,为后面更新[python接口自动化脚本更新版本],其中新版本中新增自动发送邮件功能正文带图片,使用PhantomJS截取图片后发送邮 ...

  5. [ubuntu][mysql 5.7]安装后没有密码?如何登录

    环境:(2020-04-21) WSL ubuntu LTS 18.04.1 mysql Ver 14.14 Distrib 5.7.29, for Linux (x86_64) 找到随机密码 # 显 ...

  6. [PHP学习教程 - 网络]001.下载/采集远程文件到本地(Download File)

    引言:如何把http://mzitu.com里的图片全部下载下来呢? 一身浩然正气的AC陷入的深思.... 当然这里涉及到的功能有线程,网页请求,页面提取,下载图片等等.今天,我们先讲一下如何下载文件 ...

  7. 使用jQuery实现Ajax

    jQuery对Ajax操作进行了封装,在jQuery中最底层的方法是$.ajax(), 第二层是load(),  $.get(),  $.post() 第三层是$.getScript(),   $.g ...

  8. leetcode198之打家劫舍问题

    问题描述: 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给 ...

  9. SSI PAYLOAD

    <pre><!--#exec cmd="ls" --></pre><pre><!--#echo var="DATE_ ...

  10. Python装饰器的一点解读

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/12977127.html 作者:窗户 ...