首页 > 编程语言 >微信小程序中的一些事件以及语法

微信小程序中的一些事件以及语法

时间:2024-05-24 22:56:51浏览次数:23  
标签:log 微信 程序 语法 userinfo 跳转 setData data 页面

【事件绑定】

  基本使用

新建项目,使用模板可以选择:JS基础版本
# 1 方式一
<view bind:tab="js中写方法"></view>
# 2 方式二
<view bindtab="js中写方法"></view>

# 3 js中写方法
  showLog(){
    console.log("我被点了")
  }
 1 vxml
 2 
 3 
 4 <!--index.wxml-->
 5 <view>-------事件基本使用---------</view>
 6 
 7 <button size="mini" type="warn" loading bind:tap="handleShow">点击看控制台</button>
 8 
 9 <button size="mini" type="primary" bindtap="handleShow2">看控制台</button>
10 
11 
12 *****************************
13 index.js
14 
15 Page({
16   handleShow(){
17     console.log('已经点了')
18   },
19   handleShow2(){
20     console.log('我也能点')
21   },
22 })

 

阻止事件冒泡

 1 <!--index.wxml-->
 2 
 3 <view>-------事件冒泡---------</view>
 4 <view class="view1" bind:tap="handleView1"></view>
 5 <button type="warn" plain bind:tap="handleButton1">冒泡案例</button>
 6 <view>上述案例是点击子事件,然后也会冒泡到父事件上</view>
 7 <view class="view1" bind:tap="handleView2"></view>
 8 <button type="primary" plain catch:tap="handleButton2">阻止冒泡案例</button>
 9 
10 
11 
12 <view style="height:300rpx;display: flex;justify-content: center;align-items: center; background-color: pink;" bind:tap="handleView1">
13 <button type="warn" plain bind:tap="handleButton1">冒泡案例</button>
14 
15 </view>
16 //catch
17 <view style="height:300rpx;display: flex;justify-content: center;align-items: center; background-color: orange;" bind:tap="handleView2">
18 <button type="primary" plain catch:tap="handleButton2">阻止事件冒泡</button>
19 </view>
20 
21 ********************************
22 样式
23 
24 .view1{
25   height: 300rpx;
26   display: flex;
27   justify-content: center;
28   align-items: center;
29   background-color: pink;
30 }
31 
32 
33 ******************
34 js
35 
36 Page({
37 
38   handleView1() {
39     console.log("view1被点了")
40 
41   },
42   handleButton1() {
43     console.log("button1被点了")
44   },
45   handleView2() {
46     console.log("view2被点了")
47   },
48   handleButton2() {
49     console.log("button2被点了")
50   },
51 })

 

 

事件对象和传参

data-*方案
mark:自定义属性
target :事件触发者 :dataset data定义的属性
currentTarget:事件绑定者 :dataset data定义的属性

 1 <view style="height:300rpx;display: flex;justify-content: center;align-items: center; background-color: orange;" bind:tap="handleView3">
 2 <view>handleView3事件冒泡上来的取不到被点击的组件的参数的</view>
 3 <button type="primary" plain bind:tap="handleButton" data-name="justin" data-xx="xx" mark:name="lqz">事件传参</button>
 4 </view>
 5 
 6 
 7 ***************************************
 8 js
 9 
10 handleButton(event){
11     console.log(event)
12     console.log('mark传入的参数:',event.mark.name)
13     console.log('data-字段名传入的参数:',event.currentTarget.dataset.xx)
14     console.log('data-字段名传入的参数:',event.currentTarget.dataset.name)
15 
16     console.log('data-字段名传入的参数:',event.target.dataset.xx)
17     console.log('data-字段名传入的参数:',event.target.dataset.name)
18     // mark
19     // target:dataset
20     // currentTarget:dataset
21   },
22   handleView3(event){
23     console.log(event)
24   }

 

 

页面跳转

wxml-组件跳转--声明式导航

# 1 使用 navigator 组件实现跳转
    -url :当前小程序内的跳转链接
    -open-type :跳转方式
        navigate:保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面
        redirect: 关闭当前页面,跳转到应用内的某个页面。但不能跳转到 tabbar 页面
        switchTab:跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
        reLaunch:关闭所有页面,打开到应用内的某个页面
        navigateBack:关闭当前页面,返回上一页面或多级页面
   


# 2 普通跳转 --注意带 / 
<view><navigator url="/pages/log/log"><button type="primary">登录</button></navigator></view>

# 3 open-type 属性

## 3.1 navigate:保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面
<view> <navigator url="/pages/my/my" open-type="navigate"> <button type="primary">不能跳转到我的</button></navigator> </view>
<navigator url="/pages/log/log" open-type="navigate">跳转到登录</navigator>
</view>

## 3.2 redirect: 关闭当前页面,跳转到应用内的某个页面。但不能跳转到 tabbar 页面
<view>
<navigator url="/pages/log/log" open-type="redirect">跳转到登录关闭上一个页面</navigator>
</view>

## 3.3 switchTab:跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
<view>
<navigator url="/pages/my/my" open-type="switchTab">跳转到my-tab页</navigator>
</view>

## 3.4 reLaunch:关闭所有页面,打开到应用内的某个页面
<view>
<navigator url="/pages/my/my" open-type="reLaunch">跳转到my-tab页</navigator>
<navigator url="/pages/log/log" open-type="reLaunch">跳转到login页</navigator>
</view>

## 3.5 navigateBack:关闭当前页面,返回上一页面或多级页面
<view>
<navigator url="/pages/log/log" open-type="navigate">跳转到login页</navigator>
</view>

# 默认只能返回一页,通过delta 控制返回层级  delta="2"
<navigator open-type="navigateBack">跳转到login页</navigator>


# 4 携带参数
## 4.1 跳转
<view>
<navigator url="/pages/login/log?name=justin&age=19" open-type="navigate">跳转到login页</navigator>
</view>

## 4.2 在 onl oad的options中获取参数
  onl oad(options) {
      console.log(options)
  },
    
## 4.3 注意跳转tabbar不能携带参数

js-跳转--编程式导航

# 1 5 个方法
wx.navigateTo({
    url: 'url',
})

wx.redirectTo({
    url: 'url',
})

wx.switchTab({
    url: 'url',
})

wx.reLaunch({
    url: 'url',
})

wx.navigateBack()

# 2 页面
<button type="default"  bind:tap="handlenavigateTo">navigateTo</button>
<button type="warn" bind:tap="handleredirectTo">redirectTo</button>
<button type="primary" bind:tap="handleswitchTab">switchTab</button>
<button type="default" bind:tap="handlereLaunch">reLaunch</button>
<button type="warn" bind:tap="handlenavigateBack">navigateBack</button>
    
    
# 3 js
  handlenavigateTo(){
    wx.navigateTo({
      url: '/pages/log/log',
    })
  },
  handleredirectTo(){
    wx.redirectTo({
      url: '/pages/log/log',
    })
  },
  handleswitchTab(){
    wx.switchTab({
      url: '/pages/my/my',
    })
  },
  handlereLaunch(){
    wx.reLaunch({
      url: '/pages/log/log',
    })

  },
  handlenavigateBack(){
    // 关闭当前页面,返回上一页或上某一页,传入数字
    wx.navigateBack()
      
     wx.navigateBack({
      delta:1
    })
  },

 

wxml语法

模版语法

#  1 在页面 xx.js 的 Page() 方法的 data 对象中进行声明定义
#  2 在xx.wxml 中使用 {{}} 包裹,显示数据
#  3 可以显示如下,不能编写js语句或js方法
    -变量
    -算数运算
    -三元运算
    -逻辑判断
    
# 4 只是单纯通过赋值,js中变量会变化,但是wxml中的页面不会变化,没有联动效果,需要使用setData()方法修改
    - 更新数据
    - 页面更新
 
# 5 setData案例 修改数字
## 5.1 wxml
<view>
<view>姓名是:{{name}}</view>
<view>年龄是:{{age}}</view>
<button bind:tap="handleAddAge" plain="true" type="primary" size="mini">点击增加年龄</button>
</view>
##5.2 js
  handleAddAge(){
    //this.data.age++
    console.log(this.data.age)
    this.setData({
      age:this.data.age+1
    })
  },

    
# 6 setData案例 修改对象
## 6.1 wxml<view>
<view>姓名是:{{userinfo.name}}</view>
<view>年龄是:{{userinfo.age}}</view>
<view>爱好是:{{userinfo.hobby}}</view>
<button bind:tap="handleChangeName" plain="true" type="primary" size="mini">点击修改对象-姓名</button>
</view>

## 6.2 js
    data: {
        name: 'justin',
        age: 19,
        userinfo: {
          name: 'lqz',
          age: 99
        }
      },

  handleChangeName() {
    // 增加数据
    this.setData({
      'userinfo.hobby': '篮球'
    })
    // 修改数据
    this.setData({
      'userinfo.name': '彭于晏'
    })

    // 修改多个数据--》简便方案--》展开运算符
      
    // const userinfo = {
    //   ...this.data.userinfo,
    //   name: '新名字',
    //   hobby: '乒乓球'
    // }
    // this.setData({
    //   // userinfo:userinfo
    //   userinfo //简写形式
    // })
    // 修改多个数据--》简便方案-->assign
    const userinfo = Object.assign(this.data.userinfo, {
      name: 'xxzz',
      hobby: '烫头'
    })
    this.setData({
      // userinfo:userinfo
      userinfo //简写形式
    })

    //删除数据-->单个
    delete this.data.userinfo.name // 页面删除不了,需要用setData更新
    this.setData({
      userinfo:this.data.userinfo
    })

    //删除数据-->多个--解构赋值
    const {name,age,...res}=this.data.userinfo
    this.setData({
      userinfo:res
    })

  },

    
# 7 setData 修改数组
## 7.1 js
data: {
    names:['刘亦菲','迪丽热巴','古力娜扎','马尔扎哈']
  },
    
   handleChangeList(){
    //1 增加数组
    // 1.1 增加再设置值
    this.data.names.push('亚瑟王')
    this.setData({
      names:this.data.names
    })

    // 1.2 通过数组拼接
    // const newList=this.data.names.concat("甄姬")
    // this.setData({
    //   names:newList
    // })

    // 1.3 通过解构赋值
    const newList=[...this.data.names,"李白"]
    this.setData({
      names:newList
    })

    // 2 修改数组
    this.setData({
      'names[1]':'justin'
    })

    // 3 删除数组
    this.data.names.slice(1)
    this.setData({
      names:this.data.names.slice(1)
    })


  },
## 7.2 wxml
<view wx:for="{{names}}" wx:key="index">
{{item}}

</view>
<button bind:tap="handleChangeList" plain="true" type="primary" size="mini">修改数组</button>
    
    
# 8 双向数据绑定:input checkbox 
<view>
  <!-- 不支持数组和对象 -->
  <input type="text" model:value='{{name}}' style="border:orange solid 1rpx"/>
  <checkbox model:checked="{{isCheck}}"/>
  <text>{{isCheck}}</text>
</view>

 

标签:log,微信,程序,语法,userinfo,跳转,setData,data,页面
From: https://www.cnblogs.com/liuliu1/p/18211805

相关文章

  • 三菱works3模块化技巧1-上一篇的程序示例
    1上一页,下一页对应HMI上的增减按钮,默认100页,从0开始,范围做一个限制2根据上一篇讲到的,每页8个阀门,对应16个控制和16个反馈,可以用M也可以用D,这里拿M举例3通过页数的变化来做清零4通过循环指令,预留16个名称更改,通过D100Z1变址寄存器实现,对应的序号通过Z2,只需在HMI中新......
  • Markdown语法学习
    Markdown语法学习标题最多支持六级标题,也就是六个#。字体加粗倾斜加粗倾斜删除引用”我于杀戮之中盛放,亦如黎明中的花朵“分割线图片超链接点我跳转到百度列表Frank //有序列表JayChou//无序列表表格名字性别生日张三男1977.......
  • GCC词法语法分析——AST输出及图示
    gcc提供了-fdump-tree-original、-fdump-tree-all等选项,可以输出gcc处理源代码过程中的AST及GIMPLE中间表示信息。例如使用-fudmp-tree-original就可以输出GCC进行词法/语法解析后所生成的AST信息,然而该AST信息过于繁杂,不便于分析,本文通过在GCC源代码中增加一些调试语句,从而输......
  • 初始MyBatis ,详细步骤运行第一个MyBatis程序,同时对应步骤MyBatis底层剖析
    1.初始MyBatis,详细步骤运行第一个MyBatis程序,同时对应步骤MyBatis底层剖析文章目录1.初始MyBatis,详细步骤运行第一个MyBatis程序,同时对应步骤MyBatis底层剖析每博一文案2.前沿知识2.1框架(framework)2.2三层架构2.3分析JDBC的缺点3.初始了解MyBatis4.MyBatis......
  • 微信小程序
    【小程序概述】1微信小程序是一种运行在微信内部的轻量级应用程序2小程序无需下载和安装,只需要在微信中下拉,搜一搜或扫一扫搜索点击使用即可3大前端概念 【微信小程序账号注册】1#1访问【微信公众平台】,注册一个微信小程序账号2-https://mp.......
  • Java基础的语法---String
    Java的String类是不可变的,意味着一旦创建,其值就不能被改变。String类提供了丰富的API来操作字符串。以下是一些常用的方法:构造方法:有以下几种常见的:publicclassstringlearn{publicstaticvoidmain(String[]args){Stringstr1="HelloWorld";......
  • 小程序-修改用户头像
    1、调用拍照/选择图片//修改头像constonAvatarChange=()=>{ //调用拍照/选择图片 uni.chooseMedia({  //文件个数  count:1,  //文件类型  mediaType:['image'],  success:(res)=>{   console.log(res)    ......
  • 小程序-收货地址管理模块实现
    页面结构代码:address-form.vue  --->新建地址和修改地址页面<template><viewclass="content"><form><!--表单内容--><viewclass="form-item"><textclass="label">收货人</text>......
  • prometheus 监控并发告警给企业微信
    一、部署prometheus采集系统数据的工具时序图1.1、部署node_exportenode_exporter是prometheus的一部分,用来装在被监控的服务器上下载地址:https://prometheus.io/download/#1、解压安装包tar-zxvfnode_exporter-1.7.0.linux-amd64.tar.gz#2、启动默认监听9100......
  • MySQL入门——基础语法
    数据库的操作显示当前的数据库创建数据库语法:CREATEDATABASE[IFNOTEXISTS]db_name[create_specification[,create_specification]...]create_specification:[DEFAULT]CHARACTERSETcharset_name[DEFAULT]COLLATEcollation_name说明:大写的表示关键字......