小程序常用组件

1.组件的定义

组件就是指微信定义的具有特殊功能的标签,在wxml中只能使用微信定义的标签。

2.常用组件

  <view>:用于页面布局的块级组件,类似于html中的div标签,默认不具有任何样式,独占一行
  <text>:用于页面布局的行级组件,类似于html中的span,默认不具有任何样式,不会独占一行
  <scroll-view>:可滚动的块级组件
  <swiper>:实现轮播的块级组件,其中只能放置swiper-item组件,否则会出现未定义的异常
  <icon>:图标
  <rich-text>:富文本
  <表单组件>:表单
  <navigator>:导航,类似于html中的标签<a>
  <image>:图片
  <map>:地图

3.引入外部字体图标库

  • 登录 iconfont-阿里巴巴矢量图标库:https://www.iconfont.cn
  • 找到需要的图标加入购物车 -> 添加至项目(无项目自己创建)-> 选择 Font-class -> 查看在线链接 -> 点击链接可以查看到代码
    在这里插入图片描述
  • 复制代码,并在小程序中创建一个 wcss文件,将代码粘贴至文件中
  • 直接引用里面的图标

4.组件样式

WXSS(WeiXin Style Sheets)是微信定义的一套样式语言,用于描述WXML的组件样式,具有CSS大部份特性,同时对CSS进行了扩充的修改。
相同特性如:选择器与CSS相同,都有以下几种:

  • 标签选择器:view{}
  • 类选择器:.myView{}
  • id选择器:#id{}
  • 行级样式:在组件内属性直接写style属性
  • 外部样式

扩展特性主要有以下两点:

  • 尺寸单位:新增了rpx单位,能自适应不同分辨率的手机,px是传统意义上的像素值,不能很好的适应不同分辨率的手机。
  • 样式导入:@import “外部样式文件”

全局样式与局部样式:定义在app.wxss中的样式为全局样式,作用于每一个页面。在页面的wxss文件中定义的样式为局部样式,仅作用于当前页面。全局样式与局部样式冲突时使用局部样式。

5.示例代码

WXML示例代码:

<!-- 两对大括号{{}}称为插值表达式,用来进行数据的展示 -->
<!-- <text style="height:2000rpx;display:block;background:#ccc">{{ msg }}</text> -->
<!--
  view和text
-->
<view class="hi" id="world" style="text-decoration:underline">块级标签</view>aaa
ccc
<text user-select="true">行级标签</text>bbb

<!-- wxss的扩展 -->
<view class="myView">wxss扩展特征</view>

<!-- 
  scroll-view
    1.必须要设置固定的高度或宽度
    2.内部元素必须超出高度或宽度
    3.必须定义滚动方向
-->
<scroll-view scroll-y="true" bindscrolltoupper="scrolltoupper" bindscrolltolower="scrolltolower">
  <view>view1</view>
  <view>view2</view>
  <view>view3</view>
</scroll-view>

<!--
  swiper 只可放置swiper-item组件
-->
<swiper autoplay="true" indicator-dots="true" indicator-color="#fff">
  <swiper-item>view1</swiper-item>
  <swiper-item>view2</swiper-item>
  <swiper-item>view3</swiper-item>
</swiper>

<!--
  icon 显示内置图标
-->
<view class="myicon">
  <icon type="success" size="40" color="red"></icon>
  <icon type="info"></icon>
  <icon type="download"></icon>
  <!--  引入外部的字体图标库 -->
  <text class="iconfont icon-cart"></text>
  <text class="iconfont icon-cart1"></text>
</view>

<!--
  rich-text 展示富文本代码
-->
<view class="myrichtext">
  <rich-text nodes="<h2 style='text-align:center;color:blue;'>abcd</h2>"></rich-text>
  <rich-text nodes="{{ content }}"></rich-text>
</view>

<!--
  表单组件
-->
<form class="myfrom" bindsubmit="duSUbmit">
  <input name="username" placeholder="用户名称"></input>
  <input name="pwd" password></input>
  <radio-group name="sex" bindchange="chgSex">
    <radio checked="true" value="man"></radio>
    <radio value="gril"></radio>
  </radio-group>
  <checkbox-group name="like" bindchange="chglike">
    <checkbox value="ps">爬山</checkbox>
    <checkbox value="yy">游泳</checkbox>
    <checkbox value="dlq">打蓝球</checkbox>
  </checkbox-group>
  <view>
    <picker mode="date" value="{{ date }}" bindchange="binddatechg">选择日期</picker>
    <text> {{date}} </text>
    <picker mode="region" bindchange="bindRegion">选择地址:{{ region }}</picker>
    <picker mode="selector" range="{{ countrys }}" bindchange="bindCountry">选择国家:{{ countrys[index] }}</picker>
  </view>
  <view>
    <switch checked="true" name="open" bindchange="bindOpen"></switch>
  </view>
  <view>
    <button form-type="submit" size="mini" type="primary">提交</button>
    <button type="primary" bindtap="doButton" size="mini">普通按钮</button>
  </view>
</form>

<!--
  导航组件
    1.默认只能跳转到非tabBar页面
    2.如果要跳转到tabBar页面,需要指定open-type为switchTab
-->
<navigator url="/pages/logs/logs">跳转到logs</navigator>
<navigator url="/pages/index/index" open-type="switchTab">跳转到index</navigator>
<!--  重定向时,当前页面会被卸载 -->
<navigator url="/pages/logs/logs" open-type="redirect">重定向到logs</navigator>

<!--
  image
    1.自带宽度和高度,默认width:320px,height:240px
-->
<view class="myimage">
  <image src="/images/我的1.png"></image>
  <image src="https://p1.itc.cn/q_70/images03/20240101/5d01d5da227a4a2c90c1662146af625b.jpeg"></image>
  <image src="/images/我的1.png" mode="scaleToFill"></image>
  <image src="/images/我的1.png" mode="aspectFit"></image>
  <image src="/images/我的1.png" mode="aspectFill"></image>
  <image src="/images/我的1.png" mode="widthFix"></image>
  <image src="/images/我的1.png" mode="heightFix"></image>
  <image src="/images/我的1.png" mode="top"></image>
  <image src="/images/我的1.png" mode="top right"></image>
  <image src="/images/我的1.png" mode="top left"></image>
</view>

<!--
  map
-->
<map longitude="118" latitude="32"></map>

WXSS示例代码:

.myView,scroll-view,swiper,.myicon,.myrichtext,myfrom,navigator,myimage {
  margin-bottom: 30rpx;
}

/*
  wxss中选择器与css相同
    标签选择器、类选择器、id选择器、行级样式、外部样式等
*/
view {
  color:red
}
.hi {
  background: #ccc;
}
#world {
  font-weight: bold;
}
/*
  wxss特征
    1.尺寸单位
    2.样式导入
    3.全局样式与局部样式
    4.不能指定本地图片,无法加载本地资源
*/
.myView {
  font-size: 40rpx;
  height: 400rpx;
  background: #ccc;
  background-image: url(https://bkimg.cdn.bcebos.com/pic/cefc1e178a82b9014a90e40fabc7be773912b31b41fe);
  background-size: 100%;
}
@import "../../styles/common.wxss";

text {
  color: blue;
}

scroll-view {
  height: 300rpx;
  border: 1px solid #f00;
}
scroll-view view {
  height: 200rpx;
  background: white;
  border: 1px solid white;
}

swiper {
  height: 200rpx;
  color: white;
}
swiper swiper-item:first-child {
  background-color: red;
}
swiper swiper-item:nth-child(2) {
  background-color: blue;
}
swiper swiper-item:last-child {
  background-color: green;
}

/* 引入图标字体库 */
@import "../../styles/iconfont.wxss";
.myicon text {
  font-size: 60rpx;
  color: green;
}

.myfrom input {
  background-color: #ccc;
  height: 50rpx;
  width: 400rpx;
  border: 1px solid #f00;
  margin: 0 auto;
}

.myimage image {
  width:150px;
  height:150px;
  border: 1px solid #f00;
  margin-right: 3px;
}

JS示例代码:

//获取小程序App实例
const app = getApp();
console.log(app);
console.log(app.user.name);
app.show();

Page({
  // 页面初始数据,称为数据仓库data
  data:{
    msg:'hello',
    arr:[1,2,3,4],
    user:{
      id:1001,
      name:'dog'
    },
    content:'<div><img src="../../images/我的1.png"></img></div>',
    date:'2000-09-01',
    countrys:['中国','日本','美国','英国']
  },
  /**
   * 生命周期回调函数-监听页面加载
   * 1.该函数只执行一次
   * 2.已加载的页面会被缓存,不会重复加载,提高性能
   */
  onLoad:function(options){ // 参数options中包含了跳转到当前页面时,所携带的参数信息
    console.log('关于页面加载......',options)
  },
  /**
   * 生命周期回调函数-监听页面初次渲染完成
   * 该函数只执行一次
   */
  onReady:function(){
    console.log('关于页面初次渲染完成.....')
  },
  /**
   * 生命周期回调函数-监听页面显示
   * 该函数可以多次执行,第一次执行时早于onReady
   */
  onShow:function(){
    console.log('关于页面显示......')
  },
  /**
   * 生命周期回调函数-监听页面隐藏
   * 该函数可以多次执行
   */
  onHide:function(){
    console.log('关于页面隐藏......')
  },
  /**
   * 生命周期回调函数-监听页面卸载
   */
  onUnload:function(){
    console.log('关于页面卸载......')
  },
  /**
   * 监听用户下拉刷新事件
   */
  onPullDownRefresh:function(){
    console.log('关于页面执行下拉刷新......')
  },
  /**
   * 监听用户上拉触底事件
   */
  onReachBottom:function(){
    console.log('关于页面上拉触底事件发生......')
  },
  /**
   * 监听用户点击右上脚的转发
   * 只有监听了该事件后,点击右上脚的转发才能分享
   * 转发的标题、显示的图片和转发的具体页面都可以指定
   */
  onShareAppMessage:function(options){
    console.log('关于页面执行了转发......',options);
    return {
      title:'分享标题',
      path:'/pages/about/about',
      imageUrl:'../../images/主页2.png'
    }
  },
  /**
   * 监听当前页面对应的tab点击操作
   */
  onTabItemTap:function(item){
    console.log('关于页面的tab被点击了......',item)

    // this代表当前页面实例
    console.log(this);
    // 获取自定义的数据和方法
    console.log(this.user.name);
    this.show();
    // 获取数据仓库data中的数据
    console.log(this.data.msg);
    // 修改数据仓库data中的数据,使用this.data的方式修改是不会重新渲染页面的,即页面不会同步更新,会造成数据不一致
    // 应使用 this.setData 修改就会同步渲染页面,使数据同步,
    // this.data.msg = '您好'
    this.setData({
      msg:'您好', // 如果已存在,则修改
      info:'信息' // 如果不存在,则新增
    });
  },
  /**
   * 其他:自定义的变量和函数
   */
  user:{
    name:'leo',
    sex:'男'
  },
  show(){
    console.log('执行了关于页面的show方法......')
  },
  scrolltoupper(e){ // 事件对象
    console.log('滚动到顶部',e);
  },
  scrolltolower(e){
    console.log('滚动到底部',e)
  },
  chgSex(e){
    console.log(e.detail.value) // 获取选中radio的值
  },
  chglike(e){
    console.log(e.detail.value) // 获取选中checkbox值
  },
  binddatechg(e){
    this.setData({
      date:e.detail.value
    })
  },
  bindRegion(e){
    this.setData({
      region:e.detail.value
    })
  },
  bindCountry(e){
    this.setData({
      index:e.detail.value
    })
  },
  bindOpen(e){
    console.log(e.detail.value)
  },
  duSUbmit(e){
    console.log(e.detail.value)
  },
  doButton(e){
    console.log('单击普通按钮')
  }
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值