前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微信小程序复习巩固 —— (事件处理,数据渲染,使用模板,属性自定义)

微信小程序复习巩固 —— (事件处理,数据渲染,使用模板,属性自定义)

作者头像
Gorit
发布于 2021-12-09 05:47:05
发布于 2021-12-09 05:47:05
73200
代码可运行
举报
运行总次数:0
代码可运行

微信小程序巩固 ——事件处理,数据渲染,使用模板,属性自定义

一、小程序的事件机制

小程序当中处理用户的逻辑交互大概有如下步骤

  1. 产生事件
  2. 捕捉事件
  3. 使用回到函数处理事件的结果

1.1 小程序提供的事件

链接直达

1.2 绑定事件

小程序事件的绑定是通过 bind 关键字实现的,我们直接在指定的组件上绑定上述的事件即可

  1. 在指定的标签绑定数据
  2. 然后指明回调函数
  3. 在回调函数汇中编写相对应的代码,用来处理用户的点击事件

eg: wxml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view bindtap="onTap"> 点击我 view>


<view bind:tap="onTap"> 点击我 view>

两种绑定方式没有任何区别

js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({
  data: {

  },

function (options) {

  },

  // 这里编写你的回调函数,我这里实现了一个简单的页面跳转功能
  onTap: function() {
    console.log("你点击了 tap");
    wx.navigateTo({
      url: '/pages/posts/posts',
      success : function() {
        console.log("跳转成功");
      },
      error: function() {
        console.log("服务器出现错误");
      }
    })
  }

})

补充: 两种页面跳转的方式的区别

  1. wx.navigateTo
  2. wx.redirectTo

区别一:两种页面跳转的方式的区别就是左上角是否能够返回到上一页

区别二

  1. 会执行 onHide 事件
  2. 会执行 Unload 事件

二、小程序中 catch 和 bind

catch 和 bind 的区别在于 事件冒泡的区别

在事件的捕捉中可以使用 bind 以及 catch,下面以简单的实例给大家展示一下事件冒泡

2.1 事件冒泡展示

wxml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view class="outter" bindtap="onTap">
  <view class="inner" bindtap="onTap1">我是内部view>
view>

js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({

  onLoad: function (options) {

  },

  onTap: function() {
    console.log("outter 被点击了");
  },

  onTap1:function() {
    console.log("inner 被点击了");
  }
})

效果图:

当我点击内圈的时候,两个绑定事件都会被触发,这个时候就发生了冒泡事件

2.2 冒泡事件的阻止

为了避免出现这样的情况,就出现了 catch ,来解决出现事件冒泡的问题,这里我把两个 bind 改成 catch,然后再分别点击内圈和外圈,这样就避免出现了事件冒泡的问题

三、js 数据的外部引用

在真实的开发环境当中,小程序的数据是来自服务端的,如果我们把所有的数据都写在一个 js 文件当中,显然是不太可能的,这里采用模拟服务端的数据,渲染到前端

3.1 在小程序的目录中创建一个 data 目录,用来模拟服务端传过来的数据

然后采用数组对象的形式,把数据全部集中起来

  1. 该文件命名为 data.js 文件
  2. 然后编写文件内容
  3. 使用 module.export 导出数据
  4. 在 数据传递的 js 文件中,引入该文件

3.2 案例实现

data.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var test = [
{	
	title:"xxx",
	description:"xxx",
	pub_date: "xxx",
	content: "xxx"
},
{	
	title:"xxx",
	description:"xxx",
	pub_date: "xxx",
	content: "xxx"
},{	
	title:"xxx",
	description:"xxx",
	pub_date: "xxx",
	content: "xxx"
}

// 重点来了,这里要把文件导出去给其他的 js 脚本使用
module.exports = {
  test: test
}
  1. 回到信息展示的 js 文件中,然后引入 上一步 导出的 js‘ 文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 导入数据
var test= require("../../data/test.js")
Page({

  data: {

  },

  onLoad: function(options) {
    // 页面加载时,从服务器取数据,这里模拟取数据,使用数据模拟的方式传数据
	// 传数据
    this.setData({
    // 这里根据代码的实际情况进行适当的改变即可
      test: test
    });
  },
})

四、使用 templete 模板

template 支持 wxml 和 wxss 复用,而不能支持 js 和 json

4.1 大致步骤

  1. 先创建一个名为 template 的目录
  2. 然后根据样式创建不同的目录来保存成为不同的样式
  3. 然后添加与之对应的 wxml 和 wxss 文件
  4. 然后把我们需要复用的代码块复制进 wxml 以及相对的样式 wxss,外面用 template 包裹,其属性设置为 name=“xxx”
  5. 然后在外面把准备复用的代码块删除,改成 template 即可,其属性 is 设置为上一步中 name 的值,如果数据是动态绑定的,加一个 data属性,传入即可

4.2 template 实战练习使用

比如我要复用这样的代码块

把这部分的代码块单独放进一个 template 目录下的 wxml 文件中,name 设置为 postItem ,样式我就不复制了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template name="postItem">
  <view class="post-container">
    <view class="post-author-date">
      <image class="post-author" src="{{item.author_img}}">image>
      <text class="post-date">{{item.date}}text>
    view>
    <text class="post-title">{{item.title}}text>
    <image class="post-image" src="{{item.post_img}}">image>
    <text class="post-content">
      {{item.content}}
    text>
    <view class="post-like">
      <image class="post-like-image" src="../../images/icon/chat.png">image>
      <text class="post-like-image">{{item.view_num}}text>
      <image class="post-like-image" src="../../images/icon/view.png">image>
      <text class="post-like-image">{{item.collect_num}}text>
    view>
  view>
template>

然后回到需要复用的地方

  1. 先引入 template 中的 wxml 文件,使用 . ,这个路径可以是 绝对路径,可以是相对路径,但是建议使用 相对路径
  2. 然后使用 template 标签就可以展示出内容
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <block wx:for="{{post_content}}" wx:key="{{this}}">
  
  <template is="postItem" data="{{item}}" />
  block>
  1. 还有一点需要注意,当我们把样式复制到 模板的 wxss 文件中,我们也需要在 wxss 中引用它, 方式 @import "模板样式路径"

需要特别注意的一点,路径最容易错误的,这里一定要小心

模板中不能使用 js 文件,因此业务职能写在引用文件的 js 中

template 的引用记住使用绝对路径

五、自定义属性的使用

假定我们要实现如下业务,我们在一个 for 循环实现的新闻列表要做到点击哪一个新闻就会具体显示该新闻描述,在这种情况,我们就需要通过每条新闻的下标显示指定数据

5.1 如何编写自定义属性

在view 标签中就可以使用,data-xxx 指定相对应的属性,然后使用 插值表达式绑定一个唯一的 id

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view catch:tap="onPostTap" data-post_id="{{item.post_id}}">
    <template is="postItem" data="{{item}}" />
view>

5.2 获取自定义属性中的值

我们使用的是 bindtap 的点击事件,所以他会传一个值 event,通过 event.currentTarget.dataset.post_id 就可以获取到值了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
手把手带你学习微信小程序 —— 四(事件绑定 & WXSS 样式学习)
Q:但是要如何阻止冒泡事件的产生呢? A:我们知道事件的绑定需要使用 bindtap 完成,使用阻止事件只需要把bind 改成 catch 就可以实现
Gorit
2021/12/08
1.1K0
手把手带你学习微信小程序  —— 四(事件绑定 & WXSS 样式学习)
小程序 | 10-事件
小程序需要经常和用户进行各种交互,比如,点击界面上的某个按钮或者区域,比如滑动了某个区域;这些交互都会产生各种各样的事件。
CnPeng
2021/05/17
4440
小程序 | 10-事件
【微信小程序】冒泡事件与非冒泡事件、将文章数据从业务中分离、wxml的模块化
哈喽大家好,本期是微信小程序专栏第十四期。上期我们实现了从welcome页面跳转到page页面,本期我们先对上期内容进行一个补充知识点,也就是冒泡事件与非冒泡事件的定义。本期主要实现的功能是将page.js中的文章数据分离到一个单独的js中,即将文章数据从业务中分离,通过这一功能的实现学习wxml的模块与模块化等知识点。 注意:每期内容是连载呢,建议大家可以看看往期内容,更好理解噢~
颜颜yan_
2022/12/01
6690
【微信小程序】冒泡事件与非冒泡事件、将文章数据从业务中分离、wxml的模块化
小程序学习笔记 数据绑定、条件渲染、模板引用(8.11)
wx:for:在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。
德顺
2019/11/13
7010
小程序事件、组件、生命周期、路由及数据请求
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KjBCHdmN-1596903264915)(assets/image-20200806102732122.png)]
江一铭
2022/06/16
6720
微信小程序自定义组件-城市选择「建议收藏」
上篇文章有介绍一些小程序的自定义组件语法,这篇文章就不多做赘述,重点介绍组件的实现逻辑。
全栈程序员站长
2022/08/04
1.9K0
探索微信小程序的奇妙世界:从入门到进阶
https://cloud.tencent.com/developer/article/2465647?shareByChannel=link
忆愿
2024/12/01
2210
探索微信小程序的奇妙世界:从入门到进阶
微信小程序初体验
用户1141560
2017/12/26
2.9K0
微信小程序初体验
微信小程序【事件绑定】入门一篇就搞定
上述代码就四行,首先是一个 input 输入框,目的是用来输入一些值,同时下面标签就会显示,接着是两个 button 用来分别执行 +1 或者 -1 的操作,最后一个 view 标签就是为了 进行数据输入或变化的回显
BWH_Steven
2020/09/10
2.2K0
微信小程序【事件绑定】入门一篇就搞定
微信小程序-开发入门(一)
微信小程序已经火了一段时间了,之前一直也在关注,就这半年的发展来看,相对原生APP大部分公司还是不愿意将主营业务放到微信平台上,以免受制于腾讯,不过就小程序的应用场景(用完即走和二维码分发等)还是很值得我们学习的,技术上面如果了解React的话,会发现他们在组件化上面有很多雷同之处。说白了,小程序就是基于微信平台的H5轻应用,微信将系统底层功能(设备、位置、媒体、文件等)和微信自身功能(登录、支付、分享等)封装成相应API供小程序调用。 自己根据官方文档写过一个DOME,借助和风天气开放API接口,实现天气
小古哥
2018/03/08
2.6K2
微信小程序-开发入门(一)
编写第二个页面:新闻阅读列表页面
关于Swiper组件的官方描述文档: https://mp.weixin.qq.com/debug/wxadoc/dev/component/swiper.html
端碗吹水
2020/09/23
2.2K0
编写第二个页面:新闻阅读列表页面
微信小程序个人心得「建议收藏」
官方给出了app.json五个配置项列表.(pages(Array), window(Object), tabBar(Object), networkTimeout(Object), debug(Boolean)),接着我们就详细的分下一下这几个配置项.
全栈程序员站长
2022/11/04
1.9K0
微信小程序个人心得「建议收藏」
小程序的模板化编程
之前编写的新闻列表页面中,我们把示例数据都放在了js文件中,但实际上数据是不应该写在js文件中的,所以我们得把这些数据分离到一个单独的数据文件中。然后post.js文件就加载这个数据文件中的数据即可,这样也可以模拟一下加载服务器数据的过程。
端碗吹水
2020/09/23
1.2K0
小程序的模板化编程
小程序开发
.json 后缀的 JSON 配置文件 .wxml 后缀的 WXML 模板文件 .wxss 后缀的 WXSS 样式文件 .js 后缀的 JS 脚本逻辑文件
达达前端
2019/07/11
7.3K0
小程序开发
微信小程序自定义组件
其中,components为组件目录,nodemodules为模块目录,pages为小程序的页面目录,utils为一些基础功能的封装。好比安装的第三方百度统计功能在此。
mySoul
2018/09/15
2.8K0
微信-小程序开发基础知识笔记
一个 mut-bind 触发后,如果事件冒泡到其他节点上,其他节点上的 mut-bind 绑定函数不会被触发,但 bind 绑定函数和 catch 绑定函数依旧会被触发。
yuezhongbao
2019/11/27
9460
vue和微信小程序的区别
vue的钩子函数在跳转新页面时,钩子函数都会触发,但是小程序的钩子函数,页面不同的跳转方式,触发的钩子并不一样。
IT工作者
2022/02/22
1.4K0
小程序-实现自定义组件以及自定义组件间的通信
对于组件的封装,在小程序当中对于多个页面的复用有着重要的作用,小程序中注册的每个页面都是独立的
itclanCoder
2020/11/09
2.8K0
小程序-实现自定义组件以及自定义组件间的通信
前端-vue 和微信小程序的区别、比较
写了vue项目和小程序,发现二者有许多相同之处,在此想总结一下二者的共同点和区别。
grain先森
2019/03/28
1.6K0
前端-vue 和微信小程序的区别、比较
微信小程序实战--集阅读与电影于一体的小程序项目(一)
真正的数据肯定不可能像上面那样写在wxml文件里面,而是从服务器加载的数据,下面模拟从服务器加载数据。
zhang_derek
2018/08/30
1.2K0
微信小程序实战--集阅读与电影于一体的小程序项目(一)
推荐阅读
相关推荐
手把手带你学习微信小程序 —— 四(事件绑定 & WXSS 样式学习)
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验