前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小程序事件、组件、生命周期、路由及数据请求

小程序事件、组件、生命周期、路由及数据请求

作者头像
江咏之
发布2022-06-16 08:52:07
6060
发布2022-06-16 08:52:07
举报
文章被收录于专栏:技术社区

一、事件流

  1. 事件冒泡:从点击的元素开始触发,向上事件传播
代码语言:javascript
复制
阻止事件冒泡:event.stopProPagation()
  1. 事件捕获:多上级元素传递,传递到最具体的元素
代码语言:javascript
复制
btn.addEventListener('click',function() {//回调},true)

二、小程序中事件冒泡和阻止冒泡

代码语言:javascript
复制
bind+事件名="方法名"  向上传递事件,即事件冒泡
catch+事件名="方法名"  阻止事件冒泡

三、小程序生命周期

代码语言:javascript
复制
两种路由触发模式:

1.标签方式触发
   
  vue:
   <router-link to="">
   
  小程序:<navigator url="要中转的路径?key=value">
  
  接收:通过另一个页面在onload生命周期中接收 
   
2.编程式触发

  vue:
  this.$router.push()
  
  小程序跳转:
  
  wx.navigateTo()  带历史回退
  wx.redirectTo() 不保留历史,跳转到另一个页面,不能返回到上一页面  this.$router.replace()
  wx.switchTab() 只跳转到tabBar页面,不带回退
  wx.reLaunch() 即能跳转到tabBar页面,也能跳转到非tabBar页面,不带历史回退

4.动态样式

  • 小程序支持的选择器:class选择器,id选择器,标签选择器,群组选择器,伪对象(:before,:after)
  • 可以对class做动态样式处理,例如:
代码语言:javascript
复制
   <button class="{{ index===currentIndex? 'active':'' }}" >
          {{ item.typename }}
    </button>

5.数据请求

代码语言:javascript
复制
JS原生:XMLHttpRequest,fetch
jQuery:$.ajax,$.getJSON,$.post(),$.get()
Vue:axios
React:fetch
微信小程序:wx.request() 与jQuery的$.ajax类似

wx.request({
  url:'', //请求的接口地址
  method:'get|post|put|delete',//请求方式 
  header:{},//设置请求头
  data:{}, //传参
  success() {}, //成功返回
  fail() {},// 失败返回

})

注意:

1.小程序请求的接口必须是https协议
2. 请求接口之前要提前配置接口请求:
  第一种方法:在微信小程序后台配置request合法域名
  第二种方法:在开发者工具--详情--本地配置--勾选‘不校验合法域名’

上拉加载更多
1.onReachBottom() {} 页面自带的生命周期
2.scroll-view  实现局部区域的滚动和加载更多

6.组件

  • 内置组件:微信小程序封装好的组件,直接拿来就能使用 - swiper:轮播组件,必须要和swiper-item配合使用
代码语言:javascript
复制
例如:

    <swiper 
        class='banner'
        indicator-dots="true"
        indicator-color="#f00"
        indicator-active-color="#ff0"
        circular="true"
      >
      <swiper-item wx:for="{{ banners }}" wx:key="{{ item.id }}">
        <image src="{{ item.imgurl }}"></image>
      </swiper-item>
    </swiper>
    
    参考:https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html
  • scroll-view:局部滚动组件,也可以做上拉加载,下拉刷新,例如:
代码语言:javascript
复制
  <scroll-view 
      scroll-y="true" 
      style="height:{{ height }}px;"
      bindscrolltolower="lower" 
  >
   
    <view class="movie-item" wx:for="{{ moveList }}" wx:key="{{ index }}">
        <image src="{{ item.images.small }}"></image>
         <view clas="movie-title">
            {{ item.title }}
         </view>
      
      </view>


  </scroll-view>
  • navigator
  • video或audio
  • 表单相关的组件(即小程序表单标签)
    • button
    • input
    • picker
    • checkbox
    • checkbox-group

2.自定义组件或模板(为了项目方便复用)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KjBCHdmN-1596903264915)(assets/image-20200806102732122.png)]

  • 自定义组件
    • 子组件如何创建
代码语言:javascript
复制
一个完整独立的视图单元(wxml,css,js)

创建和使用组件的步骤:
第一步:创建一个组件:在子组件文件夹上--右建--选择【新建component】选项
第二步:引入组件

    在要引入的父组件中的json文件的usingComponents添加要使用的子组件
  
 例如:
 {
  "usingComponents": {
    "组件名":"要引入的子组件路径",
     "Dialog":"/components/dialog/dialog"
  },
  "navigationBarTitleText": "首页"
}
	
第三步:使用

   在父组件直接使用子组件的标签名:<Dialog />

​ 3.组件的生命周期

​ created:组件创建完成,但不能setData

​ attached:在组件实例进入页面节点树时执行

​ ready:在组件在视图层布局完成后执行

​ detached:在组件实例被从页面节点树移除时执行

代码语言:javascript
复制
Component({
//组件的生命周期
lifetimes:{
   creaed() {},
   attached() {}, 
},
//组件与页面相关的生命周期
pageLifetimes: {
 show: function() {
   // 页面被展示
 },
 hide: function() {
   // 页面被隐藏
 },
 resize: function(size) {
   // 页面尺寸变化
 }
}


})

​ 4.Behavior:相当于vue的mixins React中类似于HOC

代码语言:javascript
复制
主要目的是为了复用组件之间相同的方法


参考官方文档:
https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/behaviors.html
https://developers.weixin.qq.com/miniprogram/dev/reference/api/Behavior.html

上代码:

模板文件: template.wxml文件中能写多个模板,用name区分:

代码语言:javascript
复制
 <template name="demo">
 <view class='tempDemo'>
   <text class='name'>FirstName: {{firstName}}, LastName: {{lastName}}</text>
   <text class='fr' bindtap="clickMe" data-name="{{'Hello! I am '+firstName+' '+LastName+'!'}}"> clcikMe </text>
 </view>
</template>

样式文件:

代码语言:javascript
复制
	<template name="demo">
     <view class='tempDemo'>
       <text class='name'>FirstName: {{firstName}}, LastName: {{lastName}}</text>
       <text class='fr' bindtap="clickMe" data-name="{{'Hello! I am '+firstName+' '+LastName+'!'}}"> clcikMe </text>
     </view>
    </template>

页面引用: page.wxml

代码语言:javascript
复制
 <!--导入模板-->
 <import src="../../templates/demo/index.wxml" />
 <!--嵌入模板-->
 <view>
   <text>嵌入模板</text>
   <template is="demo" data="{{...staffA}}"></template><!--传入参数,必须是对象-->
   <template is="demo" data="{{...staffB}}"></template><!--传入参数,必须是对象-->
   <template is="demo" data="{{...staffC}}"></template><!--传入参数,必须是对象-->
 </view>

page.wxss

代码语言:javascript
复制
@import "../../templates/demo/index.wxss" /*引入template样式*/

page.js

代码语言:javascript
复制
 Page({
    /**
     * 页面的初始数据
     */
     data: {
       staffA: { firstName: 'Hulk', lastName: 'Hu' },
       staffB: { firstName: 'Shang', lastName: 'You' },
       staffC: { firstName: 'Gideon', lastName: 'Lin' }
     },
    clickMe(e) {
      wx.showToast({ title: e.currentTarget.dataset.name, icon:  "none", duration: 100000 })
    }
 })
Component组件:

组件创建:

新建component目录——创建子目录——新建Component;

组件编写:

新建的component组件也由4个文件构成,与page类似,但是js文件和json文件与页面不同。

js:

代码语言:javascript
复制
      // components/demo/index.js
      Component({
        /**
         * 组件的属性列表
         */
        properties: {
          name: {
            type: String,
            value: ''
         }
       },
     
       /**
        * 组件的初始数据
        */
       data: {
         type: "组件"
       },
     
       /**
        * 组件的方法列表
        */
       methods: {
         click: function () {
           console.log("component!");
         }
       }
     })

json:

代码语言:javascript
复制
     {
      "component": true,
       "usingComponents": {}
     }

组件引用:

页面中引用组件需要在json配置文件中进行配置,代码如下:

代码语言:javascript
复制
      {
       "navigationBarTitleText": "模板demo",
        "usingComponents": {
          "demo": "../../components/demo/index" 
        }
      }

在模板文件中进行使用就行了,name的值为json配置文件中usingComponents的键值:

代码语言:javascript
复制
      <demo name="comp" />
      <!--使用demo组件,并传入值为“comp”的name属性(参数)-->

组件中不会自动引用公共样式,如果需要则需在样式文件中引入:

代码语言:javascript
复制
@import "../../app.wxss";
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、事件流
  • 二、小程序中事件冒泡和阻止冒泡
  • 三、小程序生命周期
  • 上代码:
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档