文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

微信小程序——语法篇

2023-08-19 06:52

关注

1.模板语法

WXML(WeiXin Markup Language)是框架设计的⼀套标签语⾔,结合基础组件、事件系统,可以构建出⻚⾯的结构。

1.1数据绑定

1.1.1普通写法

<view>{{message}}view>
Page({data:{message:'Hello World!'}})

1.1.2组件属性

<view id="item-{{id}}">view>
Page({    data: {        id: 0    }})

1.1.3bool类型

不要直接写checked=“false”,其计算结果是一个字符串

<checked checked="{{false}}"><checked>

1.2运算

1.2.1三元运算

<view hidden="{{flag?true:false}}">Hiddenview>

1.2.2算数运算

<view>{{a+b}}+{{c}}+d<view>
Page({data:{a:1,b:2,c:3}})

1.2.3逻辑判断

<view wx:if="{{length>5}}">view>

1.2.4字符串运算

<view>{{"hello"+name}}<view>
Page({data:{name:"mina"}})

1.2.5注意

花括号和引号之间如果有空格,将最终被解析成为字符串

1.3列表渲染

1.3.1wx:for

项的变量名默认为item wx:for-item 可以指定数组当前元素的变量名

下标变量名默认为index wx:for-index 可以指定数组当前下标的变量名

wx:key用来提高数组渲染的性能

wx:key绑定的值 有如下选择

string类型,表示循环项中的唯一属性 如

list:[{id:0,name:"炒饭"},{id:1,name:"炒面"}]wx:key="id"

保留字 *this,它的意思是item本身

*this代表的必须是唯一的字符串和数组

list:[1,2,3,4,5]wx:key="*this"

代码:

<view wx:for="{{array}}" wx:key="id"> {{index}}: {{item.message}}view>
Page({  data: {    array: [{      id:0,      message: 'foo',   }, {      id:1,      message: 'bar'   }] }})

1.3.2block

渲染一个包含多节点的结构块block最终不会变成真正的dom元素

<block wx:for="{{[1, 2, 3]}}" wx:key="*this" >  <view> {{index}}: view>  <view> {{item}} view>block>

1.4条件渲染

1.4.1wx:if

在框架中,使用wx:if="{{condition}}"判断是否需要渲染该代码块:

 <view wx:if="{{false}}">1view>  <view wx:elif="{{true}}">2view>  <view wx:else>3view>

1.4.2hidden

<view hidden="{{condition}}"> True view>

类似 wx:if

频繁切换用hidden

不经常使用用wx:if

2.小程序事件的绑定

小程序中绑定事件通过bind关键字来实现。如:bindtap、bindinput、bindchange等

不同的组件支持不同的事件,具体看组件的说明即可

2.1wxml

<input bindinput="handleInput" />

2.2page

Page({  // 绑定的事件  handleInput: function(e) {    console.log(e);    console.log("值被改变了"); }})

2.3特别注意

绑定事件是不能带参数 不能带括号 以下为错误写法

<input bindinput="handleInput(100)" />

事件传值 通过标签自定义属性的方式和value

<input bindinput="handleInput" data-item="100" />

事件触发时获取数据

  handleInput: function(e) {    // {item:100}   console.log(e.currentTarget.dataset)    // 输入框的值   console.log(e.detail.value); }

3.样式WXSS

WXSS( WeiXin Style Sheets )是⼀套样式语⾔,⽤于描述WXML的组件样式。

与 CSS 相⽐,WXSS 扩展的特性有:

响应式⻓度单位 rpx

样式导⼊

3.1尺寸单位

rpx (responsive pixel): 可以根据屏幕宽度进⾏⾃适应。规定屏幕宽为 750rpx 。如在iPhone6 上,屏幕宽度为 375px ,共有750个物理像素,则 750rpx = 375px = 750物理像 750rpx =375px = 750物理像素 , 1rpx = 0.5px = 1物理像素 ,1rpx = 0.5px = 1物理像素 。

设备rpx换算px(屏幕宽度/750)px换算rpx(750/屏幕宽度)
iphone51rpx=0.42px1px=2.34rpx
iphone61rpx=0.5px1px=2rpx
iphone6Plus1rpx=0.552px1px=1.81rpx

建议: 开发微信⼩程序时设计师可以⽤ iPhone6 作为视觉稿的标准。

使⽤步骤:

  1. 确定设计稿宽度 pageWidth

  2. 计算⽐例 750rpx = pageWidth px ,因此 1px=750rpx/pageWidth 。

  3. 在less⽂件中,只要把设计稿中的 px => 750/pageWidth rpx 即可。

3.2样式导入

wxss中直接就⽀持,样式导⼊功能。

也可以和 less中的导⼊混⽤。

使⽤ @import

语句可以导⼊外联样式表,只⽀持相对路径。

⽰例代码:

.small-p {  padding:5px; }
@import "common.wxss";.middle-p {  padding:15px; }

3.3. 选择器

特别需要注意的是 ⼩程序 不⽀持通配符 * 因此以下代码⽆效!

*{    margin:0;    padding:0;    box-sizing:border-box; }

⽬前⽀持的选择器有:

选择器样例样例描述
.class.intro选择所有拥有 class= intro 的组件
#id#firsrname选择拥有id="firstname"的组件
elementview选择所有view组件
element,elementview,checkbox选择所有文档的view组件和所有的checkbox组件
nth-child(n)view:nth-child(n)选择某个索引的标签
::afterview::after在view组件后边插入内容
::beforview::befor在view组件前边插入内容

4.常见组件

常见布局组件

view,text,rich-text,button,image,navigater,icon,swiper,radio,checkbox。等

4.1view

代替原来的div标签

<view hover-class="h-class"> 点击我试试  view>

4.2text

文本标签

只能嵌套text

长按文字可以复制,(只有该标签有这个功能)

可以对空格 回车 进行编码

属性名类型默认值说明
selectableBoolanfalse文本是否可选
decodeBoolanfalse是否解码

4.2.1代码

<text selectable="{{false}}" decode="{{false}}"> text>

4.3image

图片标签,image组件默认宽度为320px,高度为240px

支持懒加载

属性名类型默认值说明
srcString图片资源地址
modeString‘scaleToFill’图片裁剪、缩放的模式
lazy-loadBooleanfalse图片懒加载

mode 有效值:

mode有13种模式,其中4种是缩放模式,9种是裁剪模式

4.4swiper微信内置轮播图组件

属性名类型默认值说明
indication-dotsBooleanfalse是否显示面板指示点
indication-colorColorrgba(0,0,0,.3)指示点颜色
indication-activ-colorColor#000000当前选中的指示点颜色
autoplayBooleanfalse是否自动切换
intervalNumber5000自动切换时间
circularBooleanfalse是否循环轮播

4.5navigator导航组件 类似超链接标签

属性名类型默认值说明
tagretStringself在那个目标上发生跳转,默认当前小程序,可选值self/miniProgram
urlString当前小程序的跳转链接
open-typeStringnavigate跳转方式

open-type有效值

说明
navigate保留当前页面,跳转到应用内的某个页面,但是不能跳到tabber页面
redirect关闭当前页面,跳转到应用内的某个页面,但是不允许跳转到tabber页面
swithTab跳转到tabBar页面,打开到应用内的某个页面
reLaunch关闭所有页面,打开到应用内的某个页面
navigateBack关闭当前页面,返回上一页面或者多级页面。可通过getCurrenPages()获取当前的页面栈,决定需要返回几层
exit退出小程序,target='miniProgram’时生效

4.6rich-text富文本标签

可以将字符串解析成对应标签,类似vue种 v-html功能

代码:

// 1   index.wxml 加载 节点数组 <rich-text nodes="{{nodes}}" bindtap="tap">rich-text>// 2 加载 字符串 <rich-text nodes=''>rich-text>    // index.js    Page({  data: {    nodes: [{      name: 'div',      attrs: {        class: 'div_class',        style: 'line-height: 60px; color: red;'     },      children: [{        type: 'text',        text: 'Hello World!'     }]   }] },  tap() {    console.log('tap') }})

4.6.1nodes属性

nodes属性支持字符串和标签节点数组

属性说明类型必填备注
name标签名string支持部分受信任的HTML节点
attrs属性object支持部分受信任的属性,遵循Pascal命名法
children子节点列表array结构和nodes一致

文本节点:type=text

属性说明类型必填备注
text文本string支持entitiies

注意:

nodes 不推荐使⽤ String 类型,性能会有所下降。

rich-text 组件内屏蔽所有节点的事件。

attrs 属性不⽀持 id ,⽀持 class 。

name 属性⼤⼩写不敏感。

如果使⽤了不受信任的 HTML

节点,该节点及其所有⼦节点将会被移除。

img 标签仅⽀持⽹络图⽚。

4.7button按钮组件

代码:

<button  type="default"  size="{{defaultSize}}"  loading="{{loading}}"  plain="{{plain}}"> defaultbutton>
属性类型默认值必填说明
sizestringdefault按钮的大小
typestringdefault按钮的样式类型
plainstringfalse按钮是否镂空,背景色透明
disabledbooleanfalse是否禁用
loadingbooleanfalse名称前是否带loading图标
form-typestring用于’‘组件,点击分别会触发’'组件的submit/reset事件
open-typestring微信开放能力

size的合法值

说明
default默认尺寸
mini小尺寸

type的合法值

说明
primary绿色
default白色
warn红色

form-type的合法值

说明
submit提交表单
reset重置表单

open-type的合法值

说明
contact打开客服会话,如果用户在会话中点击消息卡片后返回小程序,可以从bindcontact回调中获得具体信息
share触发用户转发
getPhoneNumber获取用户手机号,可以在从bindgetphonebunber回调中获取到用户信息
getUserInfo获取用户信息,可以从bindgetuserinfo回调中获取到用户信息
launchApp打开APP,可以通过app-parameter设置设定向APP的参数
openSetting打开授权设置页
feedback打开”意见反馈“页面,用户可以提交反馈内容并上传日志,开发者可以登录小程序管理后台进入左侧菜单“客服反馈”页面获取到反馈内容

4.8icon

属性类型默认值必填说明
typestringicon的类型,有效值:success,success_no_circle,info,warn,waiting,cancel,download,search,clear
sizenumber/string23icon的大小
colorstringicon的颜色,用css的color

代码:

Page({  data: {    iconSize: [20, 30, 40, 50, 60, 70],    iconType: [      'success', 'success_no_circle', 'info', 'warn', 'waiting', 'cancel','download', 'search', 'clear'   ],    iconColor: [      'red', 'orange', 'yellow', 'green', 'rgb(0,255,255)', 'blue', 'purple'   ], }})

wxml

<view class="group">  <block wx:for="{{iconSize}}">    <icon type="success" size="{{item}}"/>  block>view> <view class="group">  <block wx:for="{{iconType}}">    <icon type="{{item}}" size="40"/>  block>view> <view class="group">  <block wx:for="{{iconColor}}">    <icon type="success" size="40" color="{{item}}"/>  block>view>

4.9radio单选框

可以通过color属性来修改颜色

需要搭配radio-group一起使用

4.10checkbox复选框

可以通过color属性嘞修改颜色

需要搭配checkbox-group一起使用

4.11自定义组件

1.创建自定义组件

类似于页面,一个组件由json wxml wxss js四个文件组成

在微信开发者工具中新建文件夹名为components,右键新建文件夹,新建文件夹右键新建component,会得到响应的四个文件

2.声明组件

首先需要在组件的json文件中进行自定义组件声明

{“component”:true}

3.编辑组件

同时,还要在组件的wxml文件中编辑组件模板,在wxss文件中加入组件样式

slot表示插槽,类似于vue中的slot

<view class="inner"> {{innerText}}    <slot>slot>view>

在组件的wxss文件中编写样式

注意:在组件wxss中不应使用ID选择器、属性选择器和标签选择器。

.inner {  color: red; }

4.注册组件

在组件的js文件中,需要使用Component()来注册组件,并提供组件的属性含义、内部数据和自定义方法

Component({  properties: {    // 这里定义了innerText属性,属性值可以在组件使用时指定    innerText: {      // 期望要的数据是 string类型      type: String,      value: 'default value',   } },  data: {    // 这里是一些组件内部数据    someData: {} },  methods: {    // 这里是一个自定义方法    customMethod: function(){} }})

5.声明引入自定义组件

首先要在页面的json文件中进行引用声明。还要提供对应的组件名和组件路径

index.wxml

{ // 引用声明  "usingComponents": { // 要使用的组件的名称     // 组件的路径    "my-header":"/components/myHeader/myHeader" }}

6.页面中使用自定义组件

<view>    <my-header inner-text="Some text">    <view>用来替代slot的view>    my-header>view>

4定义段与示例方法

component构造器可用于定义组件,调用component构造器可以指定组件的属性、数据、方法等

定义段类型是否必填描述
propertiesObject
Map
组件的对外属性,是属性名到属性设置的映射表
dataObject组件的内部数据,和properties一同用于组件的模板渲染
observersObject组件数据字段监听器,用于监听properties和data的变化
methodsObject组件的方法,包括事件响应函数和任意的自定义方法,关于事件响应函数的使用
createdFunction组件生命周期函数,在组件实例刚刚被创建时执行,注意此时不能调用setData
attachedFunction组件的生命周期函数,在组件实例进入页面节点树时执行
readyFunction组件的生命周期函数,在组件布局完成后执行
movedFunction组件生命周期函数,在组件实例被移动到节点树另一个位置时执行
detachedFunction组件生命周期函数,在组件实例被从页面节点树移除时执行

7.组件-自定义组件传参

父组件通过属性的方式给子组件传递参数

子组件通过事件的方式向父组件传递参数

7.1过程

父组件把数据**{{tabs}}**传递到子组件的tabItems属性中

父组件监听onMyTab事件

子组件触发bindmytap中的mytap事件

​ 自定义组件触发事件时,需要使用triggerEvent方法,指定事件名detail对象

父—>子动态传值 this.selectComponent(“#tabs”);

父组件代码

// page.wxml<tabs tabItems="{{tabs}}" bindmytap="onMyTab" > 内容-这里可以放插槽</tabs>// page.js  data: {    tabs:[     {name:"体验问题"},     {name:"商品、商家投诉"}   ] },  onMyTab(e){    console.log(e.detail); },

子组件代码

// com.wxml<view class="tabs">  <view class="tab_title"  >    <block  wx:for="{{tabItems}}" wx:key="{{item}}">      <view bindtap="handleItemActive" data-index="{{index}}">{{item.name}}</view>    </block>  </view>  <view class="tab_content">    <slot></slot>  </view></view>// com.jsComponent({  properties: {    tabItems:{      type:Array,      value:[]   } },    data: { },    methods: {    handleItemActive(e){      this.triggerEvent('mytap','haha');   } }})

5.小程序的生命周期

分为应用生命周期页面生命周期

5.1应用生命周期

属性类型默认值必填说明
onLaunchfunction监听小程序初始化
onShowfunction监听小程序启动或切后台
onHidefunction监听小程序切后台
onErrorfunction错误监听函数
onPageNotFoundfunction页面不存在监听函数

5.2页面生命周期

属性类型说明
dataObject页面的初始数据
onLoadfunction生命周期回调-监听页面加载
onShowfunction生命周期回调-监听页面显示
onReadyfunction生命周期回调-监听页面初次渲染完成
onHidefunction生命周期回调-监听页面隐藏
onUnloadfunction生命周期回调-监听页面卸载
onPullDownRefreshfunction监听用户下拉动作
onReachBottonfunction页面上拉触底事件的处理函数
onShareAppMessagefunction用户点击右上角转发
onPageScrollfunction页面滚动触发事件的处理函数
onResizefunction页面尺寸改变时触发
onTabltemTapfunction当前时tab页时,点击tab时触发

来源地址:https://blog.csdn.net/JHXL_/article/details/126793770

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯