微信小程序笔记(三)

168 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第25天,点击查看活动详情

前言

大家好呀,我是L同学。在上篇文章微信小程序笔记(二)中,我们学习了微信小程序的相关知识点,包括数据绑定、插值表达式、列表渲染、更改默认变量、性能优化、列表渲染等相关知识点。在本篇文章中,我们将学习block标签、监听事件、阻止冒泡等相关知识点。

block标签

使用 标签将控制属性(列表渲染或条件渲染的属性)从组件上分离出去。<block/> 并不是一个组件,它仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性。template 空标签(不渲染任何实质的内容) 用于包裹一堆标签。使用 <block> 标签的好处是提高代码可读性、可以提升某些场景下的性能、不会创建额外的组件实例。

条件渲染示例。

<!-- 使用前 -->
<view wx:if="{{ isShow }}">A</view>

<!-- 使用后 -->
<block wx:if="{{ isShow }}">
  <view>A</view>
</block>

列表渲染。

<!-- 使用前 -->
<view wx:for="{{books}}">
	{{ item.name }}
</view>

<!-- 使用后 -->
<block wx:for="{{books}}" wx:key="id">
  <view>{{ item.name }}</view>
</block>

减少判断,用于提升性能。

<!-- 使用前 -->
<view wx:if="{{isShow}}">hello</view>
<text wx:if="{{isShow}}">world</text>
<button wx:if="{{isShow}}">按钮</button>

<!-- 使用后 -->
<block wx-if="{{isShow}}">
  <view>hello</view>
  <text>world</text>
  <button>按钮</button>
</block>

监听事件

为小程序组件添加事件监听。

语法:

  • bind事件名="事件监听函数名"
  • bind:事件名="事件监听函数名"

编写 button 组件,并使用bind事件名bind:事件名添加点击事件。

<button bindtap="tapHandler">按钮</button>
<button bind:tap="tapHandler">按钮</button>

在页面js中添加事件监听函数。

Page({
  // 事件监听函数
	tapHandler() {
  	console.log('按钮被点击啦!')
  }
})

事件冒泡以及阻止冒泡

事件冒泡就是事件从目标组件向最外层组件逐层传递。点击子组件,它的父组件也能触发点击事件。bind:事件名 语法监听的就是事件的冒泡阶段。因此事件在当前组件上处理完后,会继续向父组件传递并触发父组件上的事件监听。

在 wxml 中编写两个父子结构的组件,并添加 tap 事件监听。

    <view style="width: 300rpx; height: 300rpx; background-color: pink;" bind:tap="tapHandler1">
  外层
  <view style="width: 200rpx; height: 200rpx; background-color: teal;" bind:tap="tapHandler2">
    内层
  </view>
</view>

在页面js中编写事件监听函数。

    Page({
  tapHandler() {
    console.log('我被触摸了');
  },
  tapHandler1() {
    console.log('外层被点击了...');
  },
  tapHandler2() {
    console.log('内层被点击了...');
  }
})

阻止冒泡

阻止冒泡就是点击子组件后,事件不再继续向父组件传递的效果(即父组件的事件监听不会被触发)。

语法:

  • catch事件名="事件监听函数"
  • catch:事件名="事件监听函数"

在 wxml 中编写两个父子结构的组件,并使用 catch事件名 代替 bind事件名 进行事件监听。

    <view style="width: 300rpx; height: 300rpx; background-color: pink;" bind:tap="tapHandler1">
  外层
  <view style="width: 200rpx; height: 200rpx; background-color: teal;" catch:tap="tapHandler2">
    内层
  </view>
</view>

在页面js中编写事件监听函数。

    Page({
  tapHandler() {
    console.log('我被触摸了');
  },
  tapHandler1() {
    console.log('外层被点击了...');
  },
  tapHandler2() {
    console.log('内层被点击了...');
  }
})