前端笔记--微信小程序(原生)

这篇具有很好参考价值的文章主要介绍了前端笔记--微信小程序(原生)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

介于工作需要,这里总结一下微信小程序的开发。

官网:微信小程序

开发文档:微信开放文档

vscode安装插件:

前端笔记--微信小程序(原生)

 前端笔记--微信小程序(原生)

一. 目录结构及相关配置

前端笔记--微信小程序(原生)

wxml 对应 html

wxss 对应 css

js 逻辑层 json 数据配置层

同样也是MVVM模型

1. 全局配置

(1)app.json

{
  "pages": [
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "Weixin",
    "navigationBarTextStyle": "black"
  },
  "style": "v2",
  "sitemapLocation": "sitemap.json",
  "lazyCodeLoading": "requiredComponents"
}

pages:该项目的所有页面,字符串对应文件路径,但是不要加后缀名。

我们可以通过在这里添加页面让微信小程序自动帮助我们生成对应的文件目录。(必须使用微信开发者工具才行)

数组中的第一项表示默认打开的页面。

windows 全局窗口默认配置 (全局配置 | 微信开放文档)

就是什么标题,背景颜色,导航栏等等。

前端笔记--微信小程序(原生)

 比如开启一个下拉刷新(都在开发文档里)

前端笔记--微信小程序(原生)

 前端笔记--微信小程序(原生)

 前端笔记--微信小程序(原生)

topBar 导航,也配置在该文件中 (全局配置 | 微信开放文档)

  "tabBar": {
    "list": [
      {
        "pagePath": "",
        "text": "",
        "iconPath": "",
        "selectedIconPath": ""
      }
    ]
  },

参数一:文件路径

参数二:文字

参数三:未选择图标

参数四:选择图标

前端笔记--微信小程序(原生)

2. 页面单独配置

就是这个文件

前端笔记--微信小程序(原生)

可以为每个页面配置单独的配置项,和app.json中window那个一样。 

{
  "usingComponents": {},
  "navigationBarTitleText":"家园"
}

3. 发布时的页面索引优化(sitemap 配置 | 微信开放文档)

前端笔记--微信小程序(原生)

注意以上配置操作建议都在微信开发者工具中完成,会有提示说明,但是开发页面逻辑时可以使用vscode,也可以使用微信开发者工具。

 二. 模板语法

1. 数据绑定

wxml (和vue的一样)

<!--pages/Home/Home.wxml-->
<!-- text就是span view就是div -->
<!-- <text>pages/Home/Home.wxml</text> -->
<view class="main">
    <text>{{user}}的家园</text>
    <checkbox style="margin-left: 10px;" checked="{{isChecked}}"></checkbox>
</view>

js

Page({

  /**
   * 页面的初始数据
   */
  data: {
    user:"Chen",
    isChecked:false,
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
    
  }
})

同时也可以双向绑定

<input model:value="{{value}}" />

2. wx:for

<!--pages/Home/Home.wxml-->
<!-- text就是span view就是div -->
<!-- <text>pages/Home/Home.wxml</text> -->
<view class="main">
    <text style="color: blue;">{{user}}的家园</text>
    <checkbox style="margin-left: 10px;" checked="{{isChecked}}"></checkbox>
    <view style="text-align:center;">
        <h1>来访游客</h1>
        <!-- 普通数组可以使用wx:key="*this" 只用一层循环可以省略item和index在标签中 -->
        <view class="customr-item" wx:for="{{list}}" wx:for-item="item" wx:for-index="index" wx:key="id">
            name:{{item.name}}---index:{{index}}
        </view>
    </view>
</view>

3. block标签 

最终渲染不会展示,说白了就是vue的<template>。为了避免多余的div

这里是循环的使用用来作占位。

4. 条件渲染

        <h1 wx:if="{{isChecked}}">来访游客</h1>
         <!-- <h1 hidden="{{isChecked}}">来访游客</h1> -->

wx:if 和vue的v-if一样,是否展示,否的话会直接销毁  (一般使用)

对应的还有 wx:elif  就是else if

hidden 是 true的话是通过修改display:none来隐藏的     (如果频繁切换使用)

5. 事件绑定

<!--pages/Search/Search.wxml-->
<view>
    <input class="search-input" type="text" bindinput="handleInput" />
    <button bindtap="addStr" data-operation="*">修改为*</button>
    <view>{{SearchValue}}</view>
</view>

bind--   绑定事件 然后将事件写在 js中  如果需要默认传参 就是用

data-xxx  xxx是自定义的名字

// pages/Search/Search.js
Page({

    /**
     * 页面的初始数据
     */
    data: {
        SearchValue:""
    },
    handleInput(e){
        this.setData({SearchValue:e.detail.value})
    },
    addStr(e){
        const data=e.currentTarget.dataset.operation
        this.setData({SearchValue:data})
    },
    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {

    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady: function () {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function () {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide: function () {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload: function () {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: function () {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage: function () {

    }
})

三. 样式

1. rpx

不管是什么机型。什么宽度。都是750rpx, 也就是说这是一个适配单位,类似vw。

可以使用计算属性来完成px到rpx转化

    width:calc(200rpx*2);

样式同样支持导入

/* pages/My/My.wxss */
@import "../../styles/common.wxss";
@color:yellow;
text{
    color:@color;
}

2. 定义全局样式变量

在app.wxss中

/**app.wxss**/
page,view,text,image,navigator{
    margin: 0;
    padding: 0;
}
page{
    /* 定义主题颜色 */
    --theme-color:red;
    /* 使用的方法就是在需要使用的页面的css中 */
    /* color: var(--theme-color); */
    --font-size:40rpx;
}

3. 使用less(vscode)

在原生框架中使用less。

前端笔记--微信小程序(原生)

安装该插件

前端笔记--微信小程序(原生)

 前端笔记--微信小程序(原生)

加上这一段 就ok了。

 前端笔记--微信小程序(原生)

 然后就可以将wxss修改为less

前端笔记--微信小程序(原生)

 3. 标签

(1)view标签

相当于div标签,还有一些基本配置。

view | 微信开放文档

(2)text标签

text | 微信开放文档

使用了text标签才可以实现我们的那个长按复制的效果

<text user-select="true">pages/My/My.wxml</text>

(3)image标签

和以前的也差不多

两个重要属性

mode  图片展示模式

lazy-load 懒加载

  <image lazy-load="true" 
  style="width: 400rpx; height: 600rpx;" 
 src="../../icons/water.png" 
 mode="aspectFit">
</image>

image | 微信开放文档

这里有个坑就是所有图片必须使用英文名,不然在开发者工具可以看到展示,但是在手机上就会看不到。

(4)swiper 轮播图

swiper | 微信开放文档

	<swiper
	 autoplay="true"
	 indicator-dots="true"
	 indicator-color="white"
	 indicator-active-color="blue"
	>
		<swiper-item>
			<image class="img-item" src="{{imgs.img1}}" mode="aspectFit" />
		</swiper-item>
		<swiper-item>
			<image class="img-item" src="{{imgs.img2}}" mode="aspectFit" />
		</swiper-item>
		<swiper-item>
			<image class="img-item" src="{{imgs.img3}}" mode="aspectFit" />
		</swiper-item>
	</swiper>

(5)navigatior 其实就是a标签

navigator | 微信开放文档

是block元素

默认但是不能跳到tabBar上配置的页面,需要修改open-type属性

(6)富文本  rich-text

其实就是v-html 将字符串解析为html。也可以将对象解析为html(看文档就行)

rich-text | 微信开放文档

 <rich-text nodes="<h1>我的信息</h1>"></rich-text>

(7)button

button | 微信开放文档

这个button有很多厉害的属性

前端笔记--微信小程序(原生)

(8)icon 图标

icon | 微信开放文档

(9)radio checkbox 单选框和复选框

四. 自定义组件

1. 创建

使用微信开发者工具点击创建component

前端笔记--微信小程序(原生)

这里的js会变成component而非pages

// components/Tabs/Tabs.js
Component({
    /**
     * 组件的属性列表
     */
    properties: {

    },

    /**
     * 组件的初始数据
     */
    data: {

    },

    /**
     * 组件的方法列表
     */
    methods: {

    }
})

2. 声明组件在哪里使用

比如我在search中使用

前端笔记--微信小程序(原生)

{
  "usingComponents": {
    "Tabs":"../../components/Tabs/Tabs"
  }
}

3. 使用组件

<!--pages/Search/Search.wxml-->
<view>
    <input class="search-input" type="text" bindinput="handleInput" />
    <button type="primary" bindtap="addStr" data-operation="*">修改为*</button>
    <view>{{SearchValue}}</view>
    <Tabs></Tabs>
</view>

4. 组件方法要写在methods中,这个就和vue2一模一样了

// components/Tabs/Tabs.js
Component({
    /**
     * 组件的属性列表
     */
    properties: {

    },

    /**
     * 组件的初始数据
     */
    data: {
        tabs: [
            { id: 1, title: "首页", isActived: false },
            { id: 2, title: "详情", isActived: false },
            { id: 3, title: "帮助", isActived: false }
        ]
    },
    /**
     * 组件的方法列表
     */
    methods: {
        selectTitle(e) {
            const { index } = e.currentTarget.dataset
            let  tabs  = JSON.parse(JSON.stringify(this.data.tabs))
            tabs.forEach((v, i) => {
                i === index ? v.isActived = true : v.isActived = false
            });
            this.setData({ tabs })
            console.log(this.data);
        },
    }
})

5. 父子传参

父里面和另外几个框架一模一样

   <Tabs father="search"></Tabs>

子组件接收要在js中声明

前端笔记--微信小程序(原生)

 properties: {
        father:{
            type:"String",
            value:""
        }
    },

type类型,value默认值

6. 子传父

还是一样,通过事件

<Tabs father="search" bind:getSelectTitle="getSelectTitle" />

绑定事件

然后在js中声明回调

 getSelectTitle(e){
        this.setData({selectValue:e.detail})
    },

触发事件,携带参数

this.triggerEvent("getSelectTitle", title)

7. 组件插槽 slot

同vue 占位符

8. 其他属性

一些重要的比如 observer 监听数据变化

还有一些生命周期的钩子

自定义组件 | 微信开放文档

五. 生命周期

1. 应用生命周期,只针对app.js

默认代码

// app.js
App({
  onLaunch() {
    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
      }
    })
  },
  globalData: {
    userInfo: null
  }
})

各个周期说明

App({
  onLaunch (options) {
    // Do something initial when launch.
  },
  onShow (options) {
    // Do something when show.
  },
  onHide () {
    // Do something when hide.
  },
  onError (msg) {
    console.log(msg)
  },
  globalData: 'I am global data'
})

onshow是切出去再切回来都会触发

onError用来收集错误信息发送给后台

2. 页面生命周期

Page({
  data: {
    text: "This is page data."
  },
  onLoad: function(options) {
    // 页面创建时执行
  },
  onShow: function() {
    // 页面出现在前台时执行
  },
  onReady: function() {
    // 页面首次渲染完毕时执行
  },
  onHide: function() {
    // 页面从前台变为后台时执行
  },
  onUnload: function() {
    // 页面销毁时执行
  },
  onPullDownRefresh: function() {
    // 触发下拉刷新时执行
  },
  onReachBottom: function() {
    // 页面触底时执行
  },
  onShareAppMessage: function () {
    // 页面被用户分享时执行
  },
  onPageScroll: function() {
    // 页面滚动时执行
  },
  onResize: function() {
    // 页面尺寸变化时执行
  },
  onTabItemTap(item) {
    // tab 点击时执行
    console.log(item.index)
    console.log(item.pagePath)
    console.log(item.text)
  },
  // 事件响应函数
  viewTap: function() {
    this.setData({
      text: 'Set some data for updating view.'
    }, function() {
      // this is setData callback
    })
  },
  // 自由数据
  customData: {
    hi: 'MINA'
  }
})

六. 常用api

 1. 网络请求

wx.request

RequestTask | 微信开放文档

   wx.request({
            url: 'http://127.0.0.1:8000/test',
            data: {
                SearchValue: this.data.SearchValue
            },
            success: function (res) {
                console.log(res);
            }
        })

需要添加白名单 否则会说无权限,当然开发过程中可以直接勾选这个选项避免检测

前端笔记--微信小程序(原生)

 添加白名单的位置

小程序

2. 本地存储

数据缓存

wx.setStorageSync(string key, any data) | 微信开放文档

可以利用该存储做一个接口缓存

在接口中保存数据

   wx.request({
            url: 'http://127.0.0.1:8000/init',
            success: (res) => {
                this.setData({ init: res.data })
                wx.setStorageSync('init', { data: res.data, time: Date.now() })
            }
        })

请求时进行判断

    let init = wx.getStorageSync('init')
        if (!init) {
            this.initData()
        } else {
            if (Date.now() - init.time > 1000 * 10) {
                this.initData()
            } else {
                this.setData({ init: wx.data })
            }
        }

这样就可以避免重复请求

3 . 权限问题

对于不同api的调用,需要权限设置的可以先检测权限问题,如果权限关闭就引导用户自己打开权限。

例如获取收货地址等。

关于权限获取和设置

wx.getSetting(Object object) | 微信开放文档

wx.openSetting(Object object) | 微信开放文档

4. 支付问题

只有企业账号才可以完成支付接口。文章来源地址https://www.toymoban.com/news/detail-503363.html

到了这里,关于前端笔记--微信小程序(原生)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序--原生

    1:常见的几种场景 2:动态绑定内容 3:动态绑定属性 4:三元运算 4:算数运算 1:定义数据 2:渲染结构 3:美化样式 4:绑定input事件处理函数 1:运行方式不同 2:使用场景 1:rpx尺寸单位 1:什么是rpx尺寸单位 2:rpx的实现原理 3:rpx与px之间的单位换算*(*了解就行) 2:

    2024年02月13日
    浏览(40)
  • 微信小程序 之 原生开发

    小程序的核心技术主要是三个: 页面布局:WXML ,类似HTML 页面样式:WXSS ,几乎就是CSS(某些不支持,某些进行了增强,但是基本是一致的) 页面脚本: JavaScript+WXS(WeixinScript) 网址 : 微信小程序 网址 : 微信开发者工具下载地址与更新日志 | 微信开放文档 Vue的MVVM和小程序MVV

    2023年04月08日
    浏览(55)
  • 微信小程序需要哪些资质?ICP许可证需要办理吗?

    近年来,不少企业提升了数字化转型的速度,相关的数字化营销服务的小程序也随之增加,据报告测算,截止到2022年末,互联网小程序超过780w,DAU突破8亿,人均使用次数超过12词,小程序已经融入到人们生活的方方面面。 因此,为了规范小程序市场,小程序上线要求也愈发

    2024年02月13日
    浏览(40)
  • 原生小程序 微信小程序 使用ucharts

    背景:    原生小程序需要好看的折线图。 实现: 小程序开发版本 一般是uni-app项目使用ucharts在原生微信小程序也是可以使用。 方法: 源码下载: uCharts: 高性能跨平台图表库,支持H5、APP、小程序(微信小程序、支付宝小程序、钉钉小程序、百度小程序、头条小程序、QQ小

    2024年02月09日
    浏览(41)
  • 微信小程序原生写法传递参数

        data-xxx   自定义参数名  ,接收参数:方法(变量名)  如果需要传递多个,可以写多个data-[参数]的方式进行传递 多个参数写法 data-a ,data-b, 接收参数 :方法(变量名)    建议采用全小写命名,简短短拼~

    2024年02月09日
    浏览(55)
  • 微信小程序(原生)搜索功能实现

     一、效果图  二、代码 wxml scss js json文件是引入的vant

    2024年02月11日
    浏览(46)
  • 实现原生微信小程序虚拟列表

    小程序的setData每一次调用,都会重新和旧的虚拟dom进行diff对比,如果页面列表比较大的话,不断频繁加载setData,实际上是非常消耗性能的,所以也是为了解决这个考虑,我虽然每一次都在使用setData加载数据,但是setData加载完成的数据,我并不是直接渲染,而是通过wxml中微

    2024年02月11日
    浏览(47)
  • 微信小程序设置为体验版需要打开调试模式

    微信小程序在开发过程中可以发布体验版本进行调试,微信扫码后,需要手动打开开发调试,步骤如下图: 1、前往体验版 2、点击右上角设置 3、点击开发调试 4、打开调试 注意点:清除微信后台,开发调试是否会自动关闭(安卓手机不会,ios的会)

    2024年02月11日
    浏览(47)
  • 微信小程序访问手机蓝牙需要用户授权解决办法

    小程序处理用户的个人信息,需要获取用户明示同意,平台计划 从2022年2月21日24时起对以下接口增加用户授权 : 访问蓝牙:调用wx.openBluetoothAdapter、wx.createBLEPeripheralServer,需要授权scope.bluetooth 添加通讯录联系人:调用wx.addPhoneContact,需要授权scope.addPhoneContact 添加日历事件

    2024年02月09日
    浏览(86)
  • 原生微信小程序使用 wxs;微信小程序使用 vant-weapp组件

    在这里插入图片描述 操作顺序 :文档地址 如果使用 typescript 需要操作步骤3,否则不需要操作 2.1 在根目录下 操作 2.2 安装版本 2.3 构建包 - 详情-勾选使用 npm 2.4 使用 vant 组件

    2024年02月11日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包