文章目录

  • 常见组件
    • view
    • text
    • image
    • swiper
    • navigator
    • rich-text 富文本标签
    • button
    • icon
    • radio
    • checkbox
    • 自定义组件
      • 创建自定义组件
      • 步骤
      • 实例实现
        • 标题激活选中 + Tabs 样式优化
        • 父向子传递数据
        • 子向父传递数据
        • slot
        • 组件的其他属性

常见组件

view

  1. hover-class 指定按下去的样式类。当 hover-class=“none” 时,没有点击态效果
  2. hover-stop-propagation 指定是否阻止本节点的祖先节点出现点击态
  3. hover-start-time 按住后多久出现点击态,单位毫秒
  4. hover-stay-time 手指松开后点击态保留时间,单位毫秒

text

  1. 文本标签
  2. 只能嵌套text
  3. 长按文字可以复制(只有这个标签有这个功能)
  4. 可以对空格 回车 进行编码
属性值 类型 默认值 说明
selectable Boolean false 文本是否可选
decode Boolean false 是否解码
<!--1 长按文字复制 selectable2 对文本内容 进行 解码
-->
<text selectable decode>text&nbsp;123
</text>
<text selectable decode>text&nbsp;123&lt;
</text>

image

属性名 类型 默认值 说明
src String 图片资源地址
mode String ‘scale ToFIll’ 图片裁剪、缩放的模式
lazy-load Boolean false 图片懒加载

mode有效值:
mode 有13中模式,其中4种是缩放模式,9种事裁剪模式。

<!--pages/demo07/demo07.wxml-->
<!-- image 图片标签1 src 指定要加载的图片的路径图片存在默认的宽度和高度 320 * 2402 mode 决定 图片内容 如何 和 图片标签 宽度 做适配1 scaleToFill 默认值 不保持纵横比缩放图片,使图片的宽高完全拉伸至填满image元素2 aspectFit 保持宽高比 确保图片的长边 显示出来  页面轮播图  常用3 aspectFill 保持纵横比缩放图片 只保证图片的 短 边能完全显示出来  少用4 widthFix 宽度不变 高度自动变化 保持原图的宽高比不变 常用(以前web中的图片的 宽度指定了之后 高度 会自己按比例来调整)5 bottom......类似以前的background-position3 小程序中的图片 直接支持 懒加载 lazy-load1 lazy-load 会自己判断 当图片  出现在视口 上下 三屏的高度 之内的时候 自己开始加载图片-->
<image mode="widthFix" src="https://s3.ax1x.com/2021/02/15/y6QXk9.jpg">//图片已经上传到图床上的
</image>

image{box-sizing:border-box;border:1px solid red;width:300px;height: 500px;
}

scaleToFill

aspectFit

aspectFill

widthFix

swiper

<!--1 轮播图外层容器 swiper2 每一个轮播项 swiper-item3 swiper标签 存在默认的样式1 width 100%2 height 150px image 存在默认高度和宽度 320 * 2403 swiper 高度 无法实现由内容撑开的4 先找出来原图的宽度和高度 等比例 给swiper 定 宽度和高度 原图的宽度和高度 1125 * 352 pxswiper 宽度 / swiper 高度 = 原图的宽度 / 原图的高度 swiper 高度 = swiper 宽度 * 原图的高度 / 原图的宽度height : 100% 或 750rpx 或  100wx * 352 px / 1125px5 autoplay 自动轮播6 interval 自动修改时间7 circular 衔接轮播8 indicator-dots 显示 指示器 分页器 索引器9 indicator-color 指示器的未选择的颜色10 indicator-active-color 选中的时候的指示器的颜色
-->
<swiper autoplay interval="1000" circular indicator-dots indicator-color="#0094ff" indicator-active-color="#ff0094"><swiper-item><image mode="widthFix" src="data:image/test1.jpg"></image></swiper-item><swiper-item><image mode="widthFix" src="data:image/test2.jpg"></image></swiper-item><swiper-item><image mode="widthFix" src="data:image/test3.jpg"></image></swiper-item><swiper-item><image mode="widthFix" src="data:image/test4.jpg"></image></swiper-item>
</swiper>
/* pages/demo10/demo10.wxss */
swiper{width: 100%;height: calc(100vw * 352 / 1125 ); }
image{width: 100%;
}

navigator

<!-- 导航组件 navigator0 块级元素 默认会换行 可以直接加宽度和高度1 url 要跳转的页面路径 绝对路径 相对路径2 target 要跳转到当前的小程序 还是其他的小程序的页面self 默认值 自己的小程序的页面miniProgram 其他的小程序的页面3 open-type 跳转方式  1 navigate 默认值 保留当前页面,跳转到应用内的某个页面,但是不能跳到tabbar 页面2 redirect 关闭当前页面 跳转到应用内的某个页面,但是不能跳到tabbar 页面3 switchTab 跳转到tabBer 页面 ,并关闭其他所有非 tabBar 页面4 reLaunch 关闭所有页面,打开到应用内的某个页面5 navigateBack 关闭当前页面,返回上一页面或多级页面,可通过getCurrentPages() 获取当前的页面栈,决定需要返回几层6 exit 退出别人的小程序,target="miniProgram"时生效--><navigator url="/pages/demo10/demo10">轮播图页面</navigator><navigator url="/pages/index/index">直接跳转到tabbar页面 跳转不了</navigator><navigator open-type="redirect" url="/pages/demo10/demo10">轮播图页面 redirect</navigator><navigator open-type="switchTab" url="/pages/index/index">switchTab 直接跳转到 tabBer 页面</navigator><navigator open-type="reLaunch" url="/pages/index/index">reLaunch 可以随便跳转</navigator>

rich-text 富文本标签

能够把html中的语言 转化为小程序的语言

// pages/demo12/demo12.js
Page({data: {// 1 标签字符串 最常用的// html 中复制的是 淘宝触屏版页面中的一段 //   html:'淘宝触屏版页面中的一段代码'// 2 对象数组html:[{// 1 div 标签 name属性来指定name:"div",// 2 标签上有哪些属性attrs:{//标签上的属性 class style class:"my_div",style:"color:red;"},// 3 子节点 children 要接收的数据类型和nodes 第二种渲染方式的数据类型一致children:[{name:"p",attrs:{},// 放文本children:[{type:"text",text:"hello"}]}]}]
}
})
<!-- rich-text 富文本标签1 nodes 属性来实现1 接收标签字符串2 接收对象数组--><rich-text nodes="{{html}}"></rich-text>

button

// pages/demo13/demo13.js
Page({//获取用户的手机号码信息getphonenumber(e){console.log(e);},//获取用户个人信息getUserInfo(e){console.log(e);}
})
<!-- button 标签1 外观的属性1 size 控制按钮的大小的1 default 默认大小2 mini 小尺寸2 type 用来控制按钮的颜色1 default 灰色2 primary 绿色3 warn 红色3 plain 按钮是否镂空 背景色透明4 loading 是否在名称前面 加一个等待图标--><button>默认按钮</button><button size="mini">mini默认按钮</button><button type="primary">primary 默认按钮</button><button type="warn">warn默认按钮</button><button type="warn" plain>plain 按钮</button><button type="primary" loading >loading 按钮</button><!-- button 开发能力open-type :1 contact 直接打开 客服对话功能 需要在微信小程序的后台配置2 share 转发当前的小程序 到微信朋友中  不能把小程序 分享到 朋友圈中3 getPhoneNumer 获取当前用户的手机号码信息 结合一个事件来使用 不是一个企业的小程序帐号 没有权限来获取用户的手机号码1 绑定一个事件 bindgetphonenumber2 在事件的回调函数中  通过参数来获取信息3 获取到的信息 已经加密过了需要用户自己搭建小程序的后台服务器, 在后台服务器中进行解析 手机号码。返回到小程序中 就可以看信息了4 getUserInfo 获取当前用的个人信息1 使用方法 类似 获取用户的手机号码2 可以直接获取 不存在加密的字段5 launchApp 在小程序当中 直接打开 app1 需要先在 app中 通过app中的某个链接 打开 小程序2 在小程序中 再通过这个功能 重新打开app3 找到 京东的app 和 京东的小程序 6 openSetting 打开小程序内置的 授权页面1 授权页面中 只会出现 用户曾经点击过的 权限 7 feedback 打开 小程序内置的 意见反馈页面1 只能够通过真机调试来打开 跟 contact 类似-->
<button open-type="contact">contact</button>
<button open-type="share">share</button>
<button open-type="getPhoneNumber" bindgetphonenumber="getphonenumber">getPhoneNumber</button>
<button open-type="getUserInfo" bindgetUserInfo="getUserInfo">getUserInfo</button>
<button open-type="launchApp">launchApp</button>
<button open-type="openSetting">openSetting</button>
<button open-type="feedback">feedback</button>


open-type的contact 的实行流程

  1. 小程序的appid 由测试号改为自己的appid
  2. 登录微信小程序官网,添加 客服- 微信
  3. 准备两个帐号
    普通用户a
    客服-微信b
  4. 用普通用户a进行扫码
  5. 点击contact按钮 就可以与客服号交流

icon

<!-- 小程序中的字体图标1 type 图标中的类型success|success_no_circle|infowarn|waiting|cancel|download|search|clear2 size 大小3 color 图标的颜色--><icon type="success" size="23" color="red"></icon>

radio

// pages/demo14/demo14.js
Page({data: {gender:""},handleChange(e){// 1 获取单选框中的值let gender=e.detail.value;// 2 把值赋值给data中的数据this.setData({//gender:gender 相当于gender})}
})
 <!-- radio 单选框1 radio标签 必须要和 父元素 radio-group 来使用2 value 选中的单选框的值3 需要给radio-group 绑定 change 事件4 需要在页面中显示 选中的值--><radio-group bindchange="handleChange"><radio color="red" value="male">男</radio><radio color="pink" value="female">女</radio></radio-group><view>您选中的是:{{gender}}</view>

checkbox

<!-- --><view><checkbox-group bindchange="handleItemChange"><checkbox value="{{item.value}}" wx:for="{{list}}" wx:key="id">{{item.name}}</checkbox></checkbox-group><view>选中的水果:{{checkedList}}</view></view>
// pages/demo15/demo15.js
Page({data: {list:[{id:0,name:"苹果",value:"apple"},{id:1,name:"葡萄",value:"grape"},{id:2,name:"香蕉",value:"bananer"}],checkedList:[]},//复选框的选中事件handleItemChange(e){// 1 获取被选中的复选框的值const checkedList=e.detail.value;// 2 进行赋值this.setData({checkedList})}
})

自定义组件

创建自定义组件

步骤

  1. 现在pages同层级目录下新建一个components的文件夹 components内新建Tabs文件夹 Tabs新建Tabs 组件文件js json wxml wxss

// components/Tabs/Tabs.js
Component({/*** 组件的属性列表*/properties: {},/*** 组件的初始数据*/data: {},/*** 组件的方法列表*/methods: {}
})
// components/Tabs/Tabs.json
{"component": true,"usingComponents": {}
}
<!--components/Tabs/Tabs.wxml-->
<text>components/Tabs/Tabs.wxml</text>
/* components/Tabs/Tabs.wxss */
  1. 在要使用的页面的json文件中写代码
// pages/demo16/demo16.json
{"usingComponents": {"Tabs":"../../components/Tabs/Tabs"}
}
  1. 在页面中当成一个普通标签使用即可
<!-- -->
<Tabs></Tabs>

实例实现

标题激活选中 + Tabs 样式优化

<!--components/Tabs/Tabs.wxml-->
<view class="tabs"><view class="tabs_title"><!-- <view class="title_item">首页</view><view class="title_item">原创</view><view class="title_item">分类</view><view class="title_item">关于</view> --><view wx:for="{{tabs}}"wx:key="id"class="title_item {{item.isActive?'active':''}}"bindtap="handleItemTap"data-index="{{index}}">{{item.name}}</view></view><view class="tabs_content">内容</view>
</view>
// components/Tabs/Tabs.js
Component({/*** 里面存放的是 要从父组件中接收的数据*/properties: {},/*** 组件的初始数据*/data: {tabs:[{id:0,name:"首页",isActive:true},{id:1,name:"原创",isActive:false},{id:2,name:"分类",isActive:false},{id:3,name:"关于",isActive:false}]},/**1 页面.js 文件中 存放事件回调函数的时候 存放在data同层级下!!!2 组件.js 文件中 存放事件回调函数的时候 必须要存放在methods中!!!*/methods: {handleItemTap(e){/*1 绑定点击事件 需要在methods中绑定2 获取被点击的索引3 获取原数组4 对数组循环1 给每一个循环性 选中属性 改为false2 给 当前的 索引的 项 添加激活选中效果就可以了!!!*/// 2 获取索引const {index}=e.currentTarget.dataset;// 3 获取data中的数组// 解构 对 复杂类型进行解构的时候 复制了一份 变量的引用而已// 最严谨的做法 重新拷贝一份 数组,再对这个数组的备份进行处理,// let tabs=JSON.parse(JSON.stringify(this.data.tabs)); 深拷贝// 不要直接修改 this.data.数据 // let {tabs}=this.data;=   let tabs=this.data.tabs;let tabs=this.data.tabs;// 4 循环数组// [].forEach 遍历数组 遍历数组的时候 修改了 v. 也会导致源数组被修改tabs.forEach((v,i)=>i===index?v.isActive=true:v.isActive=false);this.setData({tabs})}}
})
/* components/Tabs/Tabs.wxss */
.tabs{}
.tabs_title{display: flex;padding:10rpx 0;
}
.title_item{flex:1;display: flex;justify-content: center;align-items: center;
}
.active{color: red;border-bottom: 5px solid currentColor;
}
.tabs_content{}

父向子传递数据

原理

一位微信小程序萌新的学渣笔记(三)基础语法之常见组件相关推荐

  1. 微信小程序之网易云音乐(三)- 主页面底部导航、轮播图、歌单及歌曲模块开发

    微信小程序之网易云音乐(三)- 主页面底部导航.轮播图.歌单及歌曲模块开发 前言 一. 主页面底部导航 二. 轮播图区域 三. 歌单区域 四. 歌曲区域 微信小程序之网易云音乐导航 前言 创建一个新模 ...

  2. 【微信小程序】车位在线销售平台(三)

    [微信小程序]车位在线销售平台(三) 文章目录 [微信小程序]车位在线销售平台(三) 前言 一.背景色 二.个人信息 三.车位订单 四.常用功能 五.总结 前言 在前一章节中已经介绍了关于首页开发的大 ...

  3. fiddler使用教程+抓包实践+filder抓包APP+HTTPS,PC微信小程序公众号抓包笔记,fidder插件

    fiddler使用教程+抓包实践+filder抓包APP+HTTPS,PC微信小程序公众号抓包笔记,fidder插件 fiddler使用教程 界面 File->captur traffic 开启 ...

  4. 微信小程序催生新的创业机会 阿拉丁为首批乘风破浪者

    责编:陈秋歌,关注微信开发等领域,寻求报道或者投稿请发邮件chenqg#csdn.net. 欢迎加入"微信开发技术"群,参与热点.难点技术交流.请加群主微信「Rachel_qg」, ...

  5. 微信小程序智慧新零售

    传统零售的衰落 "新零售"比较引人注目的第三个背景及原因是传统零售的衰落.在电子商务(包括移动电子商务.微商等)的冲击下,传统商业举步维艰,甚至节节败退.这时候突然有一个" ...

  6. 基于微信小程序的新冠疫苗预约系统

    末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:微信小程序 && Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tom ...

  7. 基于微信小程序的新冠疫苗预约系统 uinapp

    新冠疫苗预约的需求和管理上的不断提升,新冠疫苗预约管理的潜力将无限扩大,新冠疫苗预约小程序在业界被广泛关注,本网站及对此进行总体分析,将新冠疫苗预约信息管理的发展提供参考.新冠疫苗预约小程序对新冠疫苗 ...

  8. 微信小程序:新功能WXS解读(2017.08.30新增)

    注意(来自官方文档) wxs 不依赖于运行时的基础库版本,可以在所有版本的小程序中运行. wxs 与 javascript 是不同的语言,有自己的语法,并不和 javascript 一致. wxs 的 ...

  9. 【微信小程序】微信小程序入门与实战-个人笔记

    微信小程序入门与实战 文章目录 微信小程序入门与实战 1 初识微信小程序 1-1 2020版重录说明 1-2 下载小程序开发工具 1-3 新建小程序项目 1-4 小程序appid的注册 1-5 新版小 ...

最新文章

  1. Serial Communications in Win32
  2. 【BZOJ】3751: [NOIP2014]解方程【秦九韶公式】【大整数取模技巧】
  3. CUDA error:invalid argument
  4. 2020年李永乐线性代数强化笔记-行列式与矩阵
  5. Installing ROS 2 on Ubuntu20.04 Linux
  6. dagger android 学习(二):AndroidInjector的使用
  7. 10.4 使用instanceof操作符判断对象类型
  8. 使用PHP时出现乱码,php出现乱码该怎么解决?
  9. The Use Case Definition in UML
  10. Spark高级操作之json复杂和嵌套数据结构的操作二
  11. 瑞幸咖啡:陆正耀继续担任董事和董事长
  12. fastdfs返回的url_FastDFS上传文件Demospringboot实现
  13. MacOS下安装破解版EdrawMax
  14. MySQL 管理表记录
  15. reference to ‘ max‘ is ambiguous
  16. 什么是OSINT?以及如何使用开源网络情报工具?
  17. stm32f4 ov7670 屏幕一直显示,OV7670 ERR 且MID(PID) 读出来是65535(0xffff)的解决办法
  18. 【Dubbo】序列化异常—— com.esotericsoftware.kryo.KryoException: Buffer underflow
  19. 键盘移动小div(js原生)
  20. JavaScript通过键盘方向键控制盒子移动

热门文章

  1. 数据科学家技能树(中文翻译版)
  2. MySQL视图——创建视图、修改视图、删除视图、查看视图和更新视图
  3. 微信小程序:音乐播放器带进度条
  4. Java几种设计模式
  5. 怎么修改云服务器数据库权限设置,怎么修改云服务器数据库权限
  6. CAD 开发实现不重启CAD软件修改代码调试
  7. 1527. 患某种疾病的患者(like关键字的使用)
  8. 服务器 硬件防火墙,了解服务器软硬件防火墙
  9. 使用react+redux+react-redux+react-router+axios+scss技术栈从0到1开发一个applist应用
  10. MyBatis学习笔记(六)——高级查询之一对多映射