微信小程序实践总结

article/2025/11/6 3:04:02

【1】module.exports、exports、export、import、export default使用与区别

① module.exports与exports

module.exports和exports 是commonJs的语法,大家熟知的node就是基于CommonJs语法设计的,node将每个文件视为一个拥有独立作用域链的模块,每个模块的类,变量,函数等都是私有的,对其他文件不可见。

但是,如果别的模块想要使用另一个模块的函数应该如何处理呢,这时我们就会用到module.exports、exports了。

node将每个独立的文件视为一个mudule,而exports是为了将本模块内的变量、函数暴露给外面使用的写在mudule对象上的接口,因此使用时可以通过module.exports来说暴露内部接口到外面。

module.exports实例

utils如下:

const formatTime = date => {const year = date.getFullYear()const month = date.getMonth() + 1const day = date.getDate()const hour = date.getHours()const minute = date.getMinutes()const second = date.getSeconds()return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
function recordTime(date) {var month = date.getMonth() + 1var day = date.getDate()var hour = date.getHours()var minute = date.getMinutes()return [month, day].map(formatNumber).join('/') + ' ' + [hour, minute].map(formatNumber).join(':')
}const formatNumber = n => {n = n.toString()return n[1] ? n : '0' + n
}module.exports = {formatTime: formatTime,recordTime: recordTime
}

其他页面引入

# 如index.js引入util.js使用
const util = require('../../utils/util.js')

module.exports既可以通过点语法,也可以直接赋值一个对象:


② export、import、export default

ES6使用 export 和 import 来导出、导入模块

// test.js
var name = 'jane';export {name};

其他js文件可以使用import引入使用:

//在index.js里面引入并使用
import {name} from '../../modules/test.js'

Notes:

  • export与export default均可用于导出常量/函数/文件/模块等;

  • 在一个文件或模块中,export/import可以有多个,export default只有一个;

  • 通过export方式导出,在导入时需要加{},export default不需要;

  • export能导出变量/表达式,export default不可以。

  • CommonJS模块输出是一个值的拷贝,ES6模块输出是值的引用。

  • CommonJS模块是运行时加载,ES6模块是编译时输出接口。

  • CommonJS模块无论require多少次,都只会在第一次加载时运行一次,然后保存到缓存中,下次在require,只会去从缓存取。

使用export default命令,为模块指定默认输出,这样就不需要知道所要加载模块的变量名


③ export default使用实例之暴露类

NumberAnimate.js

class NumberAnimate {constructor(opt) {//...}init() {//...}
} export default NumberAnimate;

index.js引入

//index.js
//获取应用实例
import NumberAnimate from "../../utils/animate.js";
let numberAnimate =new NumberAnimate ()

④ export暴露匿名函数

//a.js
export default {index_slides: [{id: 1,slide_url: "https://cdn.cnbj0.fds.api.mi-img.com/b2c-mimall-media/37dfdc929ee9a4313facb0b23ebcd721.jpg?thumb=1&w=720&h=360"}]
}//b.js引入
import mock from "./utils/a.js";

【2】require与import

node编程中最重要的思想就是模块化,import和require都是被模块化所使用。

require的基本语法

在导出的文件中定义module.export,导出的对象的类型不予限定(可以是任何类型,字符串,变量,对象,方法),在引入的文件中调用require()方法引入对象即可。

//a.js中
module.export = {a: function(){console.log(666)}
}
//b.js中
var obj = require('../a.js')
obj.a()  //666

本质上是将要导出的对象赋值给module这个的对象的export属性,在其他文件中通过require这个方法访问该属性。

import的基本语法

导出的对象必须与模块中的值一一对应,换一种说法就是导出的对象与整个模块进行结构赋值。

//a.js中
//最常使用的方法,加入default关键字代表在import时可以使用任意变量名并且不需要花括号{}
export default{   a: function(){console.log(666)}
}export function(){  //导出函数}
// 解构赋值语法(as关键字在这里表示将newA作为a的数据接口暴露给外部,外部不能直接访问a)
export {newA as a ,b,c}  //b.js中
//import常用语法(需要export中带有default关键字)可以任意指定import的名称
import  a  from  '...'  // 基本方式,导入的对象需要与export对象进行解构赋值。
import {...} from '...'  //使用as关键字,这里表示将a代表biubiubiu引入(当变量名称有冲突时可以使用这种方式解决冲突)
import a as biubiubiu from '...'  import {a as biubiubiu,b,c}  //as关键字的其他使用方法

require 是赋值过程并且是运行时才执行, import 是解构过程并且是编译时执行。

遵循规范

  • require 是 AMD规范引入方式
  • import是es6的一个语法标准,如果要兼容浏览器的话必须转化成es5的语法

调用时间

  • require是运行时调用,所以require理论上可以运用在代码的任何地方
  • import是编译时调用,所以必须放在文件开头

【3】全局/自定义window

① 微信默认全局配置

json文件配置中有一块针对于window的配置,如全局配置文件app.json中配置如下:

  "window": {"backgroundTextStyle": "light","navigationBarBackgroundColor": "#3cb371","navigationBarTitleText": "企业助手","navigationBarTextStyle": "white"},

如果页面得json文件没有配置window属性,那么将会采用默认app.json中的配置。如果页面json文件中配置了当前页面窗口的属性,将会覆盖掉app.json中的配置:

//leave.json
{"usingComponents": {},"enablePullDownRefresh": true,"backgroundTextStyle": "dark","onReachBottomDistance": 50,"navigationBarTitleText": "请假列表","navigationBarTextStyle": "white"
}

通常使用微信默认的窗口即可,但是如果想实现特殊效果就需要自定义样式,如下所示实现头部背景图效果:
在这里插入图片描述
这里可以看到只保留了右上角的胶囊图标。


② 自定义window

自定义window就是去掉了微信小程序默认的头部window,将空间让出来给你使用(可以理解为将page进行了拉伸)。自定义window样式需要在app.json里面配置,如下所示"navigationStyle": "custom",

  "window": {"navigationBarBackgroundColor": "#39b54a","navigationBarTitleText": "yd","navigationStyle": "custom","navigationBarTextStyle": "white"},

如果不配置"navigationStyle": "custom",,那么将会微信小程序将会默认window,即使你在页面json文件中什么也不配置,如下:
在这里插入图片描述
可以看到头部仍有保留了默认window占位。
在这里插入图片描述

在app.json对window进行了自定义配置后,可以在页面wxml里面配置自己window样式,如下所示:

//如下,在页面最上面放一个背景图
<view class='UCenter-bg'><image src='/images/logo.png' class='png' mode='widthFix'></image>
</view>
//...

这时候(即在app.json中配置了"navigationStyle": "custom",)即使你在页面json中配置了window样式也不会起作用。将会直接渲染页面wxml~


http://chatgpt.dhexx.cn/article/W6dvOxZU.shtml

相关文章

微信小程序学习

微信小程序学习 1. 小程序与普通网页开发的区别2. 小程序项目的构成3. WXML模板4. WXSS样式5. JS逻辑交互6. 小程序的宿主环境&#xff08;通信模型、运行机制&#xff09;7. 组件8. API9.小程序项目的协同工作和发布10. WXML模板语法1. 数据绑定2. 事件绑定3. 条件渲染4. 列表…

微信小程序全栈实战(二):列表循环渲染

文章目录 1.需求概念2.后台开发3.前端开发1.微信页面2.JS3.请求 1.需求概念 我们需要循环的是这数据 2.后台开发 这里为了方便&#xff0c;直接写一起 RestController Api(tags"Project模块") //模块名称 CrossOrigin //开启跨域 public class ProjectController …

微信小程序资料整理

一、初识微信小程序 1、什么是微信小程序 Ⅰ-小程序历史 1. 2017 年度百度百科十大热词之一 2. 微信小程序&#xff0c;简称小程序&#xff0c;英文名 Mini Program&#xff0c;是一种不需要下载安装即可使用的应用 3. 小程序刚发布的时候要求压缩包的体积不能大于 1M,&…

微信小程序地图添加marker

本文章是在uniapp开发的微信小程序中使用腾讯地图&#xff0c;在地图上添加标记 // 添加地图标记的方法 addMarkers(driverList) { //driverList为需要添加到地图标记上的司机数组 const markers [] //地图标记数组 driverList.forEach(…

前端的几种循环,map forEach等

今天给大家分享一些前端的基础知识&#xff0c;循环 forEach循环 let arr [node,java,php,go];// 一般俩个参数 可以加上原数组 val每一项&#xff0c;index索引&#xff0c;arr原数组。arr.forEach((val,index,arr) > {console.log(val,index,arr)})map循环 let …

小程序的城市名称,双层循环怎么实现,

小程序中的定位工作的城市名称&#xff0c; 引入map.js,需要先暴露导出&#xff0c; 在使用的js中引入 put 这样城市的名字就可以实现了,注意点就是第二次循环的时候&#xff0c;不能用原有的名字&#xff0c;需要自己设置&#xff0c;新的名字&#xff0c; <view class&…

微信小程序如何循环控制一行显示几个wx:for

正如上图所显示的一样&#xff0c;我们改如何控制一行显示几个图形呢&#xff1f; 首先第一种方法&#xff0c;数量少的可以自己一行一行的写&#xff0c;但是当数据很多的时候呢&#xff1f; 这时候就需要我们区使用循环进行代码的编写。废话不多数&#xff0c;直接写代码。 .…

微信小程序将后台数据传给map中的多个markers 用for循环赋值

首先是后台创建map类 package bean;public class mapbean { private String iconPath; public String getIconPath() {return iconPath; }public void setIconPath(String iconPath) {this.iconPath iconPath; }public int getId() {return id; }public void setId(int id) {…

java中Map循环的几种方式

package com.xhx.collection;import org.junit.Test;import java.util.HashMap; import java.util.Iterator; import java.util.Map;/*** xuhaixing* 2018/7/15 19:59**/ public class TestHashMapApp {/*** 循环的几种方式*/Testpublic void testHashMap1(){Map<String,Str…

微信小程序for循环的数据每项添加编辑和删除操作

1.代码中写出样式&#xff0c;展开的内容用if绑定上checkedall 2.点击小图标时候&#xff0c;图标进行变化&#xff08;展开收起&#xff09; 3.获取数据的方法 map&#xff08;转换&#xff09; 让每一项都绑定cheeckdall&#xff0c;各不牵扯。 简单来说&#xff1a;每一项…

微信小程序循环渲染canvas动态图表

需求&#xff1a;数据驱动图表渲染&#xff0c;先看效果图 我们知道&#xff0c;微信小程序中是没有图表组件的&#xff0c;使用echarts也会有很多问题&#xff0c;比如echarts的图表总是在屏幕最上层&#xff0c;也就是说&#xff0c;会在导航栏和菜单栏上方&#xff0c;这当…

使用map优化for循环

使用map优化for循环 微信公众号&#xff1a;前端程序猿之路关注可了解更多的前端知识&#xff0c;反馈问题或建议&#xff0c;请公众号留言。如果你觉得公众号内容对你有帮助&#xff0c;欢迎关注并转载 之前做的一个东西是点击一键升级按钮&#xff0c;修改后台返回的json数据…

通过js获取本地IP地址

通过js获取本地IP地址 最近在做pc项目&#xff0c;需要根据用户的IP地址定位城市。IP地址需要通过js获取&#xff1a; 网上有很多查询接口可以获取到IP&#xff0c;我这里用的是搜狐的&#xff1a; http://pv.sohu.com/cityjson?ieutf-8 在浏览器中&#xff0c;直接输入这…

利用JS获取用户当前ip地址

新浪的IP地址查询接口&#xff1a;http://int.dpool.sina.com.cn/iplookup/iplookup.php?formatjs &#xff08;默认为纯文本格式&#xff0c;根据format的参数定义&#xff0c;还可以返回JS、Json格式&#xff09;。新浪多地域测试方法&#xff1a; http://int.dpool.sina.c…

js获取用户浏览器信息和ip地址以及位置

获取浏览器信息代码 function userAgent () {let browserReg {Chrome: /Chrome/,IE: /MSIE/,Firefox: /Firefox/,Opera: /Presto/,Safari: /Version\/([\d.]).*Safari/,360: /360SE/,QQBrowswe: /QQ/,Edge: /Edg/};let deviceReg {iPhone: /iPhone/,iPad: /iPad/,Android: /A…

js方法获取本机IP

记录一次工作中需求 获取本机IP getUserIP(onNewIP) {// onNewIp - your listener function for new IPs//compatibility for firefox and chromevar myPeerConnection window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;var pc …

【2023亲测可用】JS 获取电脑本地IP 和 电脑网络IP(外网IP|公网IP)

1、了解&#xff1a;电脑本地的IP地址&#xff08;内网IP&#xff09;和电脑本机在网络上的IP地址&#xff08;外网IP|公网IP&#xff09; 在运行窗口输入“cmd”&#xff0c;在弹出的界面里输入“ipconfig/all”。弹出的数据中&#xff0c;IPv4地址&#xff0c;就是电脑本地的…

C语言中的,“与”,“或”,“异或”解释

int main() {int a2;//取二进制010int b4;//取二进制100//int ca && b;int ca&b;//”&“这个叫“与”&#xff0c;与门中的与&#xff0c;两个都为1的时候才为1&#xff0c; 0与任何数都为0&#xff0c;“|”这个叫“或”&#xff0c;两个都为0的时候才为0&…

C语言位运算符及作用:与、或、异或、取反、左移和右移

一、& 按位与 如果两个相应的二进制位都为1&#xff0c;则该位的结果值为1&#xff0c;否则为0 应用&#xff1a;&#xff08;1&#xff09;清零 若想对一个存储单元清零&#xff0c;即使其全部二进制位为0&#xff0c;只要找一个二进制数&#xff0c;其中各个位符合一下条…

C/运算符(按位与、按位或、按位异或)

本文主要介绍C语言中按位与、按位或、按位异或三个操作符的使用。 该三个操作符中的位&#xff0c;代表的是二进制位。 按位与&#xff1a;& 运算规则&#xff1a;只有两个数的二进制同时为1&#xff0c;结果才为1&#xff0c;否则为0。&#xff08;负数按补码形式参加按…