微信小程序学习笔记二

1. 小程序特点概述

  1. 没有DOM
  2. 组件化开发: 具备特定功能效果的代码集合
  3. 体积小, 单个压缩包体积不能大于2M, 否则无法上线
  4. 小程序的四个重要的文件

    *js

    *.wxml ---> view 结构 ---> html

    *wxss ---> view样式 ---> css

    *.json --->view 数据 ---> json文件
  5. 小程序适配方案: rpx (responsive pixel 响应式像素单位)

    小程序适配单位 px

    规定任何屏幕下宽度为 750px

    小程序会根据屏幕的宽度不同自动计算rpx 值的大小

    Iphone6下 : 1rpx = 1物理像素 = 0.5px

2. wxml语法


2.1 数据绑定

2.1.1 初始化数据

  1. 页面.jsdata选项中定义初始化数据
// pages/index/index.js
Page({
/**
* 页面的初始数据
*/
data: {
message:"hello world"
},
})

在调试器中的 AppData中可以查看当前文件的数据


2.1.2 使用数据

  1. 模板结构中使用双大括号(插值表达式) {{mssage}}
  2. 注意事项: 小程序中为单项数据流 model ---> view



    点开模拟器就可以看到页面解析后的样子了


2.1.3 修改数据

  1. this.setData( { DATA_NAME: "NEW_VALUE"}, callback)
  2. 特点:

    2.1 同步修改: this.data值被同步修改

    2.2 异步更新: 异步将setData函数用于将数据从逻辑层发送到视图层(异步)
// pages/index/index.js
Page({
/**
* 页面的初始数据
*/
data: {
message:"hello world"
}, /**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
console.log('页面加载完成'); // 修改message的状态,语法: this.setData
console.log(this); // this 代表当前页面的实例对象
this.setData({message:'new Hello World'},function () {
console.log('数据更新完成')
})
}
})



  • 在上面代码中我们知道了, setData修改数据的操作, 在自身所带的钩子函数中是同步的, 下面我们来测试一下在非自身的钩子函数中修改数据是否同步
  • 代码如下:
onLoad: function (options) {
// 这里我们定义了一个定时器, 延时两秒执行, 运行一下看在模拟器中看效果![请添加图片描述](https://img-blog.csdnimg.cn/28b629180a6c414ab23c802cc5571b9b.gif) setTimeout(() => {
this.setData({ message: 'new Hello World' }, function () {
console.log('数据更新完成')
})
}, 2000);
},



由此我们可以得出, 小程序的数据修改,在非自身的钩子函数中也是同步的


2.2 事件绑定

2.2.1 事件分类

事件分为冒泡事件和非冒泡事件:

  • 冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。
  • 非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。
    • 非冒泡事件:表单事件和自定义事件通常是非冒泡事件

事件列表

类型 触发条件 最低版本
touchstart 手指触摸动作开始 -
touchmove 手指触摸后移动 -
touchcncel 手指触摸动作被打断,如来电提醒,弹窗等 -
touchend 手指触摸动作结束 -
tap 手指触摸后马上离开 -
longpress 手指触摸后,超过350ms再离开, 如果指定了事件回调函数并触发了这个事件, tap事件将不被触发 1.5.0
longtap 手指触摸后, 超过350ms再离开 (推荐使用longpress事件代替) -
transitionend 会在 WXSS transitionwx.createAnimation动画结束后触发 -
animationstart 会在一个WXSS animation动画开始时触发 -
animationiteration 会在一个WXSS animation一次迭代结束时触发
animationend 会在一个WXSS animation动画完成时触发 -
touchforcechange 在支持 3D Touch的iPhone设备, 重按时会触发 1.9.90

2.2.2 绑定事件

  • bind绑定: 事件绑定不会阻止冒泡事件向上冒泡

    演示: 分别在 index.wxmlindex.js定义以下代码
<view class="goStudy" bindtap="clickParent">
<text catchtap="bindtap">{{message}}</text>
</view>
  clickParent() {
console.log('clickParent()');
},
clickChild() {
console.log('clickChild()');
},
  • 点击text标签之后我们查看调试器中信息, 可以看到外层的父元素的tap事件也被触发了

  • catch绑定: 事件绑定可以阻止冒泡事件向上冒泡

  • 演示: 我们将index.wxml代码修改如下

<view class="goStudy" bindtap="clickParent">
<text catchtap="bindtap">{{message}}</text>
</view>
  • 点击text标签之后我们查看调试器中信息

  • 可以看到只打印了一个clickChild(), 说明我们的默认冒泡事件被阻止了


2.2.3 向事件对象传参

  • 在小程序开发的时候,有时候需要在点击事件触发之后拿到一个参数做为使用,小程序不像 Vue 可以直接点击事件中放参数,而小程序它只能通过自定义属性进行绑定参数使用。
  1. 语法: data-KEY=VALUE

    1.1 在index.wxml中这样写
 <text catchtap="clickChild" data-msg="传递的hello world">{{message}}</text>
  1. 获取: event.target.dataset.key || event.currentTarget.dataset.key
 clickChild(e) {
console.log('clickChild()');
console.log(e.currentTarget.dataset.msg);
let newMsg = e.currentTarget.dataset.msg;
this.setData({message:newMsg});
},

  1. Event.targetevent.currenTarget的区别

    3.1 Event.target是触发事件的对象, 但不一定是绑定事件的对象, 如: 事件委托, 冒泡

    3.2 currentTarget触发事件的对象一定是绑定事件的对象, 没有事件委托

微信小程序学习笔记二 数据绑定 + 事件绑定的更多相关文章

  1. 微信小程序学习笔记二 列表渲染 + 条件渲染

    1. 列表渲染 1.1 wx:for 在组件上使用wx:for控制属性绑定一个数组, 即可使用数组中各项的数据重复渲染该组件 默认数组的当前项的下标变量名默认为 index, 数组当前项的变量名默认为 ...

  2. 【微信小程序学习笔记】入门与了解

    [微信小程序学习笔记(一)] IDE 下载安装 下载地址 官方工具:https://mp.weixin.qq.com/debug/w … tml?t=1476434678461 下载可执行文件后,可按 ...

  3. 微信小程序学习笔记一 小程序介绍 & 前置知识

    微信小程序学习笔记一 1. 什么是小程序? 2017年度百度百科十大热词之一 微信小程序, 简称小程序, 英文名 Mini Program, 是一种不需要下载安装即可使用的应用 ( 张小龙对其的定义是 ...

  4. 微信小程序学习笔记(二)--框架-全局及页面配置

    描述和功能 框架提供了自己的视图层描述语言 WXML 和 WXSS,以及基于 JavaScript 的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑. 响应的数 ...

  5. 微信小程序学习笔记(一)--创建微信小程序

    一.创建小程序 1.申请帐号.安装及创建小程序,请参照官方文档里面的操作 https://developers.weixin.qq.com/miniprogram/dev/. 小程序在创建的时候会要求 ...

  6. 微信小程序学习笔记(阶段一)

    一阶段学习过程: (一)看官方文档的简易教程:https://mp.weixin.qq.com/debug/wxadoc/dev/ (二)看小码哥视频:https://chuanke.baidu.co ...

  7. 微信小程序学习笔记(3)--------框架之配置

    我们使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.设置多 tab 等. app.json 配置项列表 属性 类型 必填 描述 pages Stri ...

  8. 微信小程序学习笔记以及VUE比较

    之前只是注册了一下微信小程序AppID,随便玩了玩HelloWorld!(项目起手式),但是最近看微信小程序/小游戏,崛起之势不可阻挡.小程序我来了!(果然,一入前端深似海啊啊啊啊啊~) 编辑器: S ...

  9. 微信小程序学习笔记1--小程序的代码构成

    最近打算学习一下微信小程序,看了微信公众平台的文档感觉还比较简单,就从这个方向重新找回学习的状态吧: 1.先了解一下小程序的代码构成: 创建项目后会看到四种后缀的文件: .json 后缀的 JSON ...

随机推荐

  1. ES6 数组Arrary 常用方法

    ES6 数组Arrary 常用方法: <script type="text/javascript"> // 操作数据方法 // arr.push() 从后面添加元素,返 ...

  2. 【游记】OI 2020-2021(在更)

    [CSP-S2020初赛] [CSP-S2020] [NOIp 2020] [NOI冬令营 2021] [省选 2021] [NOI 2021]

  3. 最大流最小割——bzoj1001狼抓兔子,洛谷P2598

    前置知识 平面图 平面图就是平面上任意边都不相交的图.(自己瞎画的不算XD) 对偶图 比如说这个图,我们发现平面图肯定会把平面分成不同的区域(感觉像拓扑图),并把这些区域当做每个点(不被包围的区域独自 ...

  4. Maven作用及应用

    1.简介 Maven是一个项目管理的Java 工具,在JavaEE中,我们可以使用Maven方便地管理团队合作的项目,现在我们在学习JavaEE框架,使用Maven可以管理类库,有效方便地供团队中的其 ...

  5. 第四十九篇 -- 添加联系人信息Addcontact

    往通讯录里添加联系人 首先,在清单文件里添加读写权限 <uses-permission android:name="android.permission.READ_CONTACTS&q ...

  6. jquery 获取url地址参数

    1 var url = document.URL; 2 var a = url.split("="); 3 4 if(a[1]){ 5 return options.fn(this ...

  7. IOS真机调试找不到设备:ERROR: Could not connect to lockdownd, error code -[x]

    报错信息: Could not connect to lockdownd, error code -3 解决方法:修改var/db/lockdown文件夹的读写权限 在终端找到文件夹cd var/db ...

  8. 🏆【Java技术专区】「延时队列专题」教你如何使用【精巧好用】的DelayQueue

    延时队列前提 定时关闭空闲连接:服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之. 定时清除额外缓存:缓存中的对象,超过了空闲时间,需要从缓存中移出. 实现任务超时处理:在网络协议滑动窗口请求 ...

  9. http request 请求拦截器,有token值则配置上token值

    // http request 请求拦截器,有token值则配置上token值 axios.interceptors.request.use( config => { if (token) { ...

  10. Java后端编译

    概述 如果我们把字节码看作是程序语言的一种中间表示形式(Intermediate Representation,IR)的话, 那编译器无论在何时.在何种状态下把Class文件转换成与本地基础设施(硬件 ...