微信小程序基本语法

官网 https://developers.weixin.qq.com/miniprogram/dev/framework/

视频教程:尚硅谷微信小程序开发教程,2024最新微信小程序项目实战!

仿慕尚花坊项目源码:https://gitee.com/abcdfdewrw/flower-workshop

目录

一,初识微信小程序

微信小程序是一种运行在微信内部的 轻量级 应用程序。

小程序的四大特性:无须安装,用完即走,无须卸载,触手可及。

二,文件和目录结构介绍


三,配置文件介绍

小程序中常见的配置文件有以下几种:

1,app.json : 小程序全局配置文件,用于配置小程序的一些全局属性和页面路由;

2,页面.json : 小程序页面配置文件,也称局部配置文件,用于配置当前页面的窗口样式,页面标题等;

3,project.config.json :小程序项目的配置文件,用于保存项目的一些配置信息和开发者的个人设置;

4,sitemap.json:配置小程序及其页面是否允许被微信索引,提高小程序在搜索引擎搜索到的概率。

四,尺寸单位rpx

rpx:是小程序新增的自适应单位,它可以根据不同的设备屏幕宽度进行自适应缩放;

小程序规定任何型号手机:屏幕宽都为750rpx

五,事件绑定和事件对象

【事件绑定】

【事件传参】

第一种方法:data-* 传参

第二种方法:mark:* 传参

六,事件/阻止事件冒泡

事件分为 冒泡事件非冒泡事件
冒泡事件 :当一个组件的事件被触发后,该事件会向父节点传递;
非冒泡事件:当一个组件的事件被触发后,该事件不会向父节点传递。

javascript 复制代码
<button catch:tap="btnHandler"></button> // 用catch来阻止事件冒泡

七,声明和绑定数据

javascript 复制代码
// 展示内容
<text>{{scholle}}</test>

// 绑定属性值,如果需要动态绑定一个变量,属性值也需要使用双大括号进行包裹
<text id="{{id}}">{{scholle}}</test>

// 如果属性值是布尔值,也需要使用双大括号进行包裹
<checkbox checked="{ischecked}" /> 

八,setData修改数据

javascript 复制代码
// 修改值
this.setData({key:value}) // key 是需要更新的数据;value 是最新的值

九,简易版双向数据绑定

十,列表渲染


javascript 复制代码
  <swiper
    autoplay
    class="swiper"
    indicator-active-color="#FF734C"
    interval="2000"
    duration="1000"
    indicator-color="rgba(0, 0, 0, .3)"
    bindchange="getSwiperIndex"
  >
    <block wx:for="{{ bannerList }}" wx:key="index">
      <swiper-item class="swiper-item">
        <navigator
          class="navigator"
          hover-class="none"
          url="/modules/goodModule/pages/goods/detail/detail?goodsId={{ item.id }}"
        >
          <image class="img" src="{{ item.imageUrl }}"></image>
        </navigator>
      </swiper-item>
    </block>
  </swiper>

十一,条件渲染

十二,小程序的运行机制



十三,小程序更新机制

javascript 复制代码
 // 检测冷启动版本更新
   onLaunch() {
    const updateManager = wx.getUpdateManager(); // 监听下载的状态

    // 当下载完成新版本以后,会触发 onUpdateReady 回调函数
    updateManager.onUpdateReady(function () {
      // 在回调函数中给用户提示
      wx.showModal({
        title: "更新提示",
        content: "新版本以及准备好,是否重启应用?",
        success: (res) => {
          if (res.confirm) {
            // 强制当前小程序使用新版本并且会重新启用当前小程序
            updateManager.applyUpdate();
          }
        },
      });
    });
  },

十四,小程序生命周期介绍

【应用生命周期】

【页面生命周期】


onReady 代表页面已经准备妥当,可以和视图层进行交互

【组件的生命周期】

javascript 复制代码
// 组件生命周期声明对象
lifetimes {
    created() {},
    attached() {},
    ......
}

【组件所在页面的声明周期】

补充:

1,tabBar页面之间相互切换,页面不会被销毁;

2,点击左上角,返回上一个页面,会销毁当前页面。

总结:


十五,小程序API

【界面交互】

javascript 复制代码
wx.showLoading() // 显示loading提示框
wx.hideLoading() // 关闭loading提示框
wx.showModal() // 模态对话框
wx.showToast() // 消息提示框

【本地存储】

【路由跳转】

【上垃加载/下拉刷新】

javascript 复制代码
onReachBotoom() {} // 监听用户上拉加载
onPullDownRefresh(){} // 监听用户下拉刷新

在app.json或者page.json 中配置距离页面底部距离:onReachBottomDistance;默认50px

十六,插槽

十七,监听

javascript 复制代码
在页面的的js中写上 observers{
    'key':(newValue) => {}
}

// 监听单个属性
observers: {
    'n1': function(newN1){
     ......
    }
  },

// 监听多个数据
observers: {
    'n1, n2': function(newN1, newN2){
      ......
    }
  },
  
  // 监听全部对象
  observers: {
    'obj.**': function(newObj){
     ......
    }
  },
  

十八,组件通信

一,父向子传参 Properties

二,子向父传参

javascript 复制代码
子组件:
sendData() {
    this.triggerEvent('myevent',this.data)
}

父组件:
......
<customer bind:myevent="getData" /> // 子组件
......

getData(event) {
    ......
}

三,获取组件实例

javascript 复制代码
// 在父组件中 获取 子组件的实例
......
<customer bind:myevent="getData" class='child' /> // 子组件
......

getChild() {
    const res = this.selectComponent('.child') // 类似于 ref
}

十九,小程序分包加载



javascript 复制代码
 --app.json 
   // 分包设置
  "subPackages": [
    {
      "root": "modules/settingModule", // 分包根目录
      "name": "settingModule", // 分包别名
      "pages": [ // 分包路径
        "pages/address/add/index",
        "pages/address/list/index",
        "pages/profile/profile"
      ]
    }
  ],
  
  // 分包预下载
  "preloadRule": { // key:value的形式:key代表的是 当访问到这个目录的时候,预下载分包
    "pages/settings/settings":{ 
      "network": "all",
      "packages": ["settingModule"]
    }
  }

二十,获取微信头像

javascript 复制代码
    <view class="avatar">
      <button
        hover-class="none"
        open-type="chooseAvatar"
        bind:chooseavatar="onChooseAvatar"
      >
        <image src="{{ userInfo.headimgurl || '/assets/images/avatar.png' }}" />
      </button>
    </view>


  async onChooseAvatar(e) {
      const { avatarUrl } = e.detail;

      const { data } = await reqUploadFile(avatarUrl, "file");
      this.setData({
        "userInfo.headimgurl": data.data,
      });
    },
javascript 复制代码
   <form bindsubmit="getNickName">
      <input
        type="nickname"
        name="nickname"
        class="input-name"
        value="{{ userInfo.nickname }}"
      />
      <view class="dialog-content">
        <button class="cancel" bindtap="cancelForm" form-type="reset">取消</button>
        <button class="confirm" type="primary" form-type="submit">确定</button>
      </view>
    </form>

    getNickName(event) {
      // console.log('弹窗确定=》',event);
      const { nickname } = event.detail.value;
      this.setData({
        "userInfo.nickname": nickname,
        isShowPopup: false,
      });
    },

二十一,转发功能 / 分享朋友圈


javascript 复制代码
  // 转发功能
  onShareAppMessage(){
    return {
      title:"只为你怦然心动",
      path:'/pages/index/index',
      imageUrl:'../../../../../assets/images/love.jpg'
    }
  },

  // 分享朋友圈
  onShareTimeline() {
   return {
     title:"只为你怦然心动",
     path:'/pages/index/index',
     imageUrl:'../../../../../assets/images/love.jpg'
   }
  },

二十二,手机号验证组件

二十三,客服功能

二十四,自定义导航栏

二十五,骨架屏

可在 微信开发者工具 中自动生成骨架屏

二十六,mobx-miniprogram




javascript 复制代码
npm install --save mobx-miniprogram mobx-miniprogram-bindings
javascript 复制代码
-- 创建一个Store对象 userStore
// observable 创建被检测的对象,对象中的属性会被转换为响应式数据
// action 函数是用来显示的定义 action 方法

import { observable, action } from "mobx-miniprogram";

export const userStore = observable({
  token: "",
  userInfo: {},

  setToken: action(function (token) {
    this.token = token;
  }),

  setUserInfo: action(function (userInfo) {
    this.userInfo = userInfo;
  }),
});


-- 页面中导入使用
import { userStore } from "../../../../stores/userstore";
ComponentWithStore({
  storeBindings: {
    store: userStore,
    fields: ["userInfo"],
    actions: ["setUserInfo"]
  },
  })

二十七,用户登录


二十八,地理位置功能

首先在 app.json 中声明地理位置方法

javascript 复制代码
--app.json
 
   "requiredPrivateInfos": ["getLocation","chooseLocation"],
  "permission": {
    "scope.userLocation": {
      "desc": "获取地理位置信息用于填写收获地址" // 描述
    }
  }

wx.getLocation 方法

javascript 复制代码
 // 获取用户地理位置信息
  async onLocation() {
    // 获取当前的地理位置(精度,纬度,高度)
    const res = await wx.getLocation();
    console.log("获取用户地理位置=》", res);
  },

如果用户拒绝授权,后面重新授权思路

wx.chooseLocation() 方法

javascript 复制代码
  // 获取用户地理位置信息
  async onLocation() {
 // 打开地图让用户选择
    const res = await wx.chooseLocation()
    console.log("获取用户地理位置=》", res);
  },
相关推荐
尚梦4 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
小飞哥liac7 小时前
微信小程序的组件
微信小程序
stormjun8 小时前
Java基于微信小程序的私家车位共享系统(附源码,文档)
java·微信小程序·共享停车位·私家车共享停车位小程序·停车位共享
paopaokaka_luck8 小时前
基于Spring Boot+Vue的助农销售平台(协同过滤算法、限流算法、支付宝沙盒支付、实时聊天、图形化分析)
java·spring boot·小程序·毕业设计·mybatis·1024程序员节
Bessie23411 小时前
微信小程序eval无法使用的替代方案
微信小程序·小程序·uni-app
shenweihong11 小时前
javascript实现md5算法(支持微信小程序),可分多次计算
javascript·算法·微信小程序
蜕变菜鸟11 小时前
小程序跳转另一个小程序
小程序
14 小时前
躺平成长-代码开发,利用kimi开发小程序(09)
小程序
17 小时前
微信小程序运营日记(第四天)
微信小程序·小程序
guanpinkeji17 小时前
旧衣回收小程序:提高回收效率,扩大服务范围
大数据·小程序·团队开发·软件开发·小程序开发·旧衣回收·旧衣回收小程序