遇到类似 ref 交互的 情况 所需写法

// wxml<wux-calendar id="wux-calendar" />
// js
Page({data: {},onLoad(){let WUXCalendar = this.selectComponent('#wux-calendar')console.log(WUXCalendar,'WUXCalendar');WUXCalendar.touchMove = true},
})
// json
{"navigationStyle": "default","navigationBarTitleText": "预约","usingComponents": {"wux-cell-group": "/miniprogram_npm/wux-weapp/cell-group/index","wux-cell": "/miniprogram_npm/wux-weapp/cell/index","wux-calendar": "/miniprogram_npm/wux-weapp/calendar/index"}
}

引用 npm 包

  1. npm init 初始化一下npm
  2. 下载 npm 包。例如: npm i wux-weapp -S --production
  3. project.config.json 文件里 修改配置
    1. {"setting": {"packNpmManually": true,"packNpmRelationList": [{"packageJsonPath": "./package.json","miniprogramNpmDistDir": "./"}]}
      }
  4. 微信开发者工具 点击 : 工具 => 构建 npm => 构建成功 => 多出的文件

  5. 引用 npm 包插件 方式

    1. 页面 的 json文件

      1. {"navigationStyle": "default","usingComponents": {"wux-cell-group": "/miniprogram_npm/wux-weapp/cell-group/index","wux-cell": "/miniprogram_npm/wux-weapp/cell/index","wux-calendar": "/miniprogram_npm/wux-weapp/calendar/index"}
        }
    2. 页面的 wxml 文件
      1. <wux-calendar id="wux-calendar" />
    3. 页面的 js 文件
      1. Page({data: {},onLoad(){let WUXCalendar = this.selectComponent('#wux-calendar')console.log(WUXCalendar,'WUXCalendar'); // 可获取组件方法WUXCalendar.touchMove = true},
        })
  6. 引用 npm 包 的样式配置在全局 app.wx
    1. @import './miniprogram_npm/wux-weapp/styles/index.wxss';

微信小程序中navigateTo的跳转以及传递参数

// 跳转
goAbout(e) {wx.navigateTo({url:`/pages/make/about/index?key=value&key2=value2`})
}
// 接收参数
onLoad: function (options) {//此处接收传递过来的参数wx.navigateTo跳转时传递的参数console.log(options.key);console.log(options.key2);//如果要在页面中使用this.setData({id: options.key})
},
//  注意 :可能是版本区别,有的是这样写的
onLoad(option) {console.log(option.query.id);console.log(option.query.time);
}

wx.navigateBack()函数返回上一页并传参

// 不需要传参
wx.navigateBack()// 需要传参
// 注意:调用 navigateTo 跳转时,调用该方法的页面会被加入堆栈,而 redirectTo 方法则不会。见下方示例代码
// 此处是 A 页面
wx.navigateTo({url: 'B?id=1'
})
// 此处是 B 页面
wx.navigateTo({url: 'C?id=1'
})
// 在 C 页面内 navigateBack,将返回 A 页面
wx.navigateBack({delta: 2
})

Component 组件

监听对象属性的变化 attached 、observer

支持监听对象中单个或多个属性的变化

Component({properties: {type: {type: String,value: '',observer: function (newV) {console.log(newV,'newV');}},},observers: {'some.flag.**': function(flag) {// 使用 setData 设置 this.data.some.flag本身或其下任何子数据字段时触发// (除此以外,使用 setData 设置 this.data.some 也会触发)flag=== this.data.some.flag},},attached: function() {// 这样会触发上面的 observerthis.setData({'some.flag': { /* ... */ }})// 这样也会触发上面的 observerthis.setData({'some.flag.xxx': { /* ... */ }})// 这样还是会触发上面的 observerthis.setData({'some': { /* ... */ }})}
})

组件生命周期

页面loding

// loding 显示
wx.showLoading({ title: '加载中' })
// loding 隐藏
wx.hideLoading()

类似于 v-show 方法 hidden

<view hidden="{{tabsType !== 'project'}}">显示</view>

类似于 v-if 方法  wx:if

<view wx:if="{{isFab}}" catchtap="goToDo" class="make_fab_button make_fab_button_todo"> 新增 </view>

微信小程序原生3种提示弹窗

wx.showToast({title: '操作成功!',  // 标题icon: 'success',   // 图标类型,默认success 图标支持开发文档的iconduration: 1500   // 图标停留时间,默认1500ms
})

wx.showToast({title: '加载中...',//提示的标题icon: 'loading',//iconduration: 1500 //图标停留的时间
})

wx.showToast({title: '未上线',icon: 'none',//iconduration: 1500 //停留时间
})

微信小程序-弹出对话框

wx.showModal({title: '提示',content: '这是一个模态弹窗',success (res) {if (res.confirm) {console.log('用户点击确定')} else if (res.cancel) {console.log('用户点击取消')}}
})

页面首次请求数据 onLoad 和 onShow 的区别

onLoad(e) { // 页面加载数据,从详情页回退本页 不会 再次触发// e 里带有路由 传递的参数},onShow() { // 页面加载数据,从详情页回退本页 会 再次触发let that = thisapp.getUser(function (user) {that.setData({ user });//加载that.loadInfo()});},

路由跳转 区别

wx.navigateBack() // 可返回原页面
wx.reLaunch({ url: `/pages/make/index` }) // 关闭所有页面,打开到应用内的某个页面。
wx.switchTab({ url: `/pages/make/index` }) //  可跳转至tabBat页面。
wx.navigateTo({ url: `/pages/make/index` }) //  不能跳转至tabBar页面。
wx.redirectTo() //  关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar   

嵌套 H5 页面web-view

小程序端

<web-view src="http://localhost:8000/calendarDom/12&213421412&123123211"></web-view>

微信端 vue3

<template><div v-if="isMini">微信: {{ routerId }}</div><div v-if="!isMini">不是微信: {{routerId}}</div>
</template><script>
import { ref, onMounted, reactive, defineProps, toRefs, watch } from "vue";
import { useRouter } from 'vue-router';
export default {name:'calendarDom'setup() {const props = defineProps({})const $router = useRouter();// 1. 先定义一个空的响应式数据( ref 定义的)// 2 setup中返回定义的数据,需要获取哪个 dom 元素,就在对应元素上使用 ref 属性绑定该数据即可。let data = reactive({routerId:$router.currentRoute.value.params.id, // 获取 微信传参的路由参数isMini: /miniProgram/i.test(navigator.userAgent),// 判断是不是微信环境})return {...toRefs(data),}}
}
</script>
<style>
</style>

vue3 动态路由传参

// router/index.js
import { createRouter, createWebHistory } from 'vue-router'
// 引用的两种方法
import callPage from "../view/callPage.vue"; // 方法一//路由数组
const routes = [{path: "/",name: "callPage",component: callPage,children: []},{path: "/calendarDom/:id",name: "calendarDom",component: () => import('../view/calendarDom.vue'), // 方法二children: []}
]//路由对象
const router = createRouter({history: createWebHistory(process.env.BASE_URL),routes //上面的路由数组
})//导出路由对象,在main.js中引用
export default router
// main.js
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'createApp(App)
.use(router)
.mount('#app')
// App.vue<script setup>
</script><template><router-view></router-view>
</template><style scoped>
</style>

wxml 排版 多个 空格

decode="{{true}}"

<text decode="{{true}}">空格 &nbsp;&nbsp;&nbsp;&nbsp; 空格 </text>

点击图片放大 并 进行长按保存

<!-- 点击图片 放大 -->
<image src="{{accessory}}" class='icon100' data-imgUrl="{{accessory}}" bindtap="setLookImage"></image>
<!-- 显示放大图片 并 长按进行保存 -->
<view wx:if="{{!!lookImage}}" class="fellow_lookImage" data-imgUrl="{{''}}" bindtap="setLookImage"><image src="{{lookImage}}" show-menu-by-longpress></image>
</view>
Page({data: {accessory:'',lookImage:'',},setLookImage(e){const lookImage = e.currentTarget.dataset.imgurlthis.setData({ lookImage })}
})

上传图片 wx.chooseImage

一、使用APIwx.chooseImage(OBJECT)

wx.chooseImage(OBJECT)

从本地相册选择图片或使用相机拍照。

OBJECT参数说明:

参数

类型

必填

说明

count

Number

最多可以选择的图片张数,默认9

sizeType

StringArray

original 原图,compressed 压缩图,默认二者都有

sourceType

StringArray

album 从相册选图,camera 使用相机,默认二者都有

success

Function

成功则返回图片的本地文件路径列表 tempFilePaths

fail

Function

接口调用失败的回调函数

complete

Function

接口调用结束的回调函数(调用成功、失败都会执行)

注:文件的临时路径,在小程序本次启动期间可以正常使用,如需持久保存,需在主动调用 wx.saveFile,在小程序下次启动时才能访问得到。

success返回参数说明:

参数

类型

说明

最低版本

tempFilePaths

StringArray

图片的本地文件路径列表

tempFiles

ObjectArray

图片的本地文件列表,每一项是一个 File 对象

1.2.0

File 对象结构如下:

字段

类型

说明

path

String

本地文件路径

size

Number

本地文件大小,单位:B

var util = require('../../utils/util.js')
Page({data:{src:"../image/pic4.jpg"},gotoShow: function(){var _this = thiswx.chooseImage({count: 9, // 最多可以选择的图片张数,默认9sizeType: ['original', 'compressed'], // original 原图,compressed 压缩图,默认二者都有sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有success: function(res){// successconsole.log(res)_this.setData({src:res.tempFilePaths})},fail: function() {// fail},complete: function() {// complete}})}

二、图片路径进行数据绑定

<view class="container"><view><button type="default" bindtap="gotoShow" >点击上传照片</button> </view><view><image class= "show-image" mode="aspectFitf" src="{{src}}"></image></view>
</view>

1、wx.chooseImage 调用相机或相册

2、<image class= "show-image" mode="aspectFitf" src="{{src}}"></image> 数据绑定

3、js中动态修改文件路径

var _this = this
wx.chooseImage({count: 9, // 最多可以选择的图片张数,默认9sizeType: ['original', 'compressed'], // original 原图,compressed 压缩图,默认二者都有sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有success: function(res){// successconsole.log(res)_this.setData({src:res.tempFilePaths})},fail: function() {// fail},complete: function() {// complete}

picker 带有 搜索 过滤 组件 && 键盘弹起覆盖 问题解决

子组件

由于 picker-viewbindchange取值会有延迟情况 所以 借用了 bindpickstart & bindpickend 事件结合使用防止获取选中值不一致问题

// index.js
Component({options: {// 在组件定义时的选项中启用多slot支持multipleSlots: true},/*** 组件的属性列表*/properties: {id:{type: String,value: 'demopicker'},// 初始化 initValue: {type: String,value: ''},// 父组件传递过来的数据列表items: {type: Array,value: []}},/*** 组件的初始数据*/data: {//控制picker的显示与隐藏flag: true,// 用户输入的关键词searchValue:'',// 滚动选择的setValues: [],// 滚动选择的索引selectSchoolIndex:'',itemsList:[],show:true},/*** 组件的方法列表*/methods: {/*** @name: 搜索* @author: camellia* @date: 20211129*/bindKeyInput(e){let self = this;const val = e.detail.valueconst list = self.data.items.filter(fv => fv.realname.includes(val) && fv )this.setData({ itemsList: [...list] })// self.triggerEvent('searchSchool', e.detail.value);},/*** @name: 隐藏picker* @author: camellia* @date: 20211129*/hiddeDatePicker(){let self = this;self.setData({ flag: !self.data.flag, searchValue:'' })},/*** @name: 展示picker* @author: camellia* @date: 20211129*/showDatePicker(){let self = this;self.setData({flag: !self.data.flag})self.getItems()},/*** @name: 选择好后,点击确定* @author: camellia* @date: 20211129*/confirm(){let self = this;// 获取用户选择的let item = self.data.itemsList[self.data.selectSchoolIndex] ? self.data.itemsList[self.data.selectSchoolIndex] : self.data.itemsList[0];// 通过发送自定义事件把用户选择的传递到父组件console.log(item,'item');self.triggerEvent('confirm', item);self.setData({ flag: !self.data.flag, searchValue:'' })},/*** @name: 用户滚动picker时,获取滚动选择的索引* @author: camellia* @date: 20211129*/bindChange(e){let self = this;self.setData({// 用户选择的索引selectSchoolIndex:e.detail.value[0]})},bindpickstart(){ // 滚动选择开始this.setData({show: false})},bindpickend(){ // 滚动选择结束setTimeout(()=>{this.setData({show: true})},500)},/*** @name: 获取初始化信息* @author: camellia* @date: 20211130*/getItems(e){let self = this;this.setData({ itemsList: [...self.data.items] })if (self.data.itemsList.length && self.data.initValue) {let itemsList = self.data.itemsListfor (let i = 0; i < itemsList.length; i++) {if (self.data.initValue == itemsList[i].id) {self.setData({ setValues: [i] })return}}}self.setData({ setValues: [0] })},
},
})
<view class="date-background" hidden="{{flag}}"  id="{{demopicker}}"><view class='date-gray-background' bindtap='hiddeDatePicker'></view><view class='date-container'><view class="transparent"><view class='date-confirm'><view bindtap='hiddeDatePicker' class="quxiao font-size-text">取消</view><!-- cursor-spacing="350" 键盘弹框弹起 避免选项被键盘遮挡 --><input class="search-input" cursor-spacing="350" maxlength="10" value="{{searchValue}}" bindinput="bindKeyInput" placeholder="输入筛选" placeholder-class="placeholderStyle"/><view hidden="{{show}}" class="quxiao font-size-text">确定</view><view hidden="{{!show}}" bindtap='confirm' class="queding font-size-text">确定</view></view><picker-viewwx:if="{{itemsList.length}}"indicator-class="indicator"value="{{setValues}}"bindchange="bindChange"bindpickstart="bindpickstart"bindpickend="bindpickend"indicator-style="height: 100rpx;"mask-style="height:700rpx;"style="width: 100%; height: 85%;position:absolute;bottom:0rpx;text-align:center;background:white"><picker-view-column class="pickViewColumn"><view wx:for="{{itemsList}}" wx:key="id" style="line-height: 104rpx">{{item.realname}}</view></picker-view-column></picker-view><view wx:if="{{!itemsList.length}}"indicator-style="height: 100rpx;"mask-style="height:700rpx;"style="width: 100%; height: 86%;position:absolute;bottom:0rpx;text-align:center;background:white;box-sizing: border-box;padding-top: 20rpx;">暂无匹配数据</view></view></view>
</view>
.date-background {position: fixed;left: 0;top: 0;width: 100%;height: 100%;z-index: 9999;
}
.date-gray-background {position: fixed;width: 100%;top: 0;background: rgba(0, 0, 0, .5);height: calc(100% - 500rpx);z-index: 9999;
}
.date-container {position: fixed;width: 100%;height: 600rpx;overflow: hidden;background: #fff;bottom:0;z-index: 9999;
}.date-confirm {display: flex;justify-content: space-between;height: 80rpx;align-items: center;padding:0 20rpx;border-bottom:2rpx solid #eee;
}
.pickViewColumn{height: 700rpx;
}
.indicator{height: 80rpx;border: 1rpx solid #E5E8E8;
}
.font-size-text{font-size: 32rpx;
}
.quxiao{color: rgb(146, 141, 141);
}
.queding{color: #12A4Fa;
}
.placeholderStyle{font-size: 28rpx;background-color: #eee;padding-left: 8rpx;
}
.search-input{width: 70%;height: 56rpx;
}
{"component": true,"usingComponents": {}
}

父组件

{"usingComponents": {"MySeachPicker":"/components/MySeachPicker"}
}
<view ><view ><view >下拉选择</view><view ><button bindtap="showSchoolPicker">点击</button></view></view><MySeachPicker id="demopicker" initValue="{{siteconsultantInfo.id || ''}}" items="{{creatorList}}" bindconfirm="confirm"/></view>
Page({data: {statusList:[],//状态},onLoad() {let self = this;// 获取自定义 picker实例self.demopicker = self.selectComponent("#demopicker");console.log(self.demopicker,'self.demopicker');},onShow() { },confirmSchool(){let self = this;// 隐藏自定义pickerself.demopicker.hiddeDatePicker();},confirm(e){console.log(e.detail,'e隐藏自定义picker');},showSchoolPicker(){let self = this;console.log(self.demopicker,'self.demopicker');self.demopicker.showDatePicker()},
})

input 带有 手机键盘搜索触发

<input class='search_input' type='text' confirm-type='search' bindconfirm='toSearch' ></input>
//js部分
toSearch(e){console.log(e.detail.value) //e.detail.value 为input框输入的值
}

局部视口滚动到底部触发事件

<view class="followUp-list"><scroll-view bindscrolltolower="touchBottom" enhanced="{true}" scroll-y="{true}" scroll-with-animation="{true}"  lower-threshold='50'><view class="followUp-list-item" wx:for="{{followUpList}}"><view class="text-center followUp-flex2"  data-item="{{item}}" bindtap="gotoDelit">{{item.account_name}}</view><view class="text-left followUp-flex2"  data-item="{{item}}" bindtap="gotoDelit">{{item.node_realname}}</view><view class="text-left followUp-flex4 eee-color"  data-item="{{item}}" bindtap="gotoDelit"><view class="text-left"> 状态: {{item.follow_type_title}}</view><view class="text-left"> 时间: {{item.follow_time}}</view><view class="text-left">{{item.explain}}</view></view><view class="text-center followUp-flex2" data-item="{{item}}" bindtap="taskChangeStatus">{{item.status_title}}</view></view></scroll-view>
</view>touchBottom(){console.log(123);
},.followUp-list{scroll-view {width: 100%;height: 380rpx;}
}

自适应页面 设置滚动高度


<view class="InitialRecord_details"><scroll-view bindscrolltolower="touchBottom" style="height: {{scrollViewHeight}}px;" enhanced="{true}" scroll-y="{true}" scroll-with-animation="{true}" lower-threshold='50'><view wx:for="{{lookList}}" class="InitialRecord_details_list"><view> 2023年1月1日 </view></view>    <view wx:if="{{lookList.length <= 0}}" class="zanwu_list">暂无数据</view></scroll-view><button id="id_v_search" class="InitialRecord_details_back_btn" bindtap="btnBack">返回</button>
</view>// pages/customer/InitialRecord/details/index.js
import { Ajax } from '../../../../utils/ajax.js';
Page({/*** 页面的初始数据*/data: {lookList: [],page: 1,pageSize: 3,customer_id: 0,windowHeight: 0,scrollViewHeight: 0,},/*** 生命周期函数--监听页面加载*/onLoad(options) {const { customer_id = 0 } = optionsthis.setData({ customer_id })this.getData()const that = thiswx.getSystemInfo({success: function(res) {that.setData({ windowHeight: res.windowHeight });}});let query = wx.createSelectorQuery().in(this);// 然后逐个取出节点信息// 选择器的语法与jQuery语法相同query.select('#id_v_search').boundingClientRect();// 执行上面所指定的请求,结果会按照顺序存放于一个数组中,在callback的第一个参数中返回query.exec((res) => {// 取出 搜索框布局 的高度let reduceHeight = res[0].height;// 然后就是做个减法let scrollViewHeight = that.data.windowHeight - reduceHeight;// 算出来之后存到data对象里面that.setData({ scrollViewHeight });console.log(scrollViewHeight,'scrollViewHeight');});},btnBack() {wx.navigateBack()},// 获取列表数据getData() {wx.showLoading({title: '加载中...',})const { page = 1, pageSize = 20, customer_id = 0, lookList = [] } = this.dataconst params = { page, pageSize, customer_id }Ajax('/follow/data', { ...params }, 'GET').then(res => {console.log(res, 'follow/data')const { status, data = {list: []}, paginator = {currentPage: 1, total: 0} } = reslet newData = data.listconst {currentPage= 1, total= 0} = paginatorif (lookList.length < total) {// 处理 下拉加载分页 数据newData = [...lookList, data]}if (status) {this.setData({ // 处理 下拉加载分页page: lookList.length < total ? + this.data.page + 1 : currentPage,lookList: newData })}wx.hideLoading()}).catch(() => wx.hideLoading())},touchBottom() { // 处理 下拉触发 分页请求this.getData()},
}).InitialRecord_details{width: 100%;height: 100%;flex: 1;overflow: hidden;scroll-view {width: 100%;padding: 10rpx 20rpx;box-sizing: border-box;.InitialRecord_details_list{width: 100%;margin: 10rpx auto;border: 1px solid #ccc;box-sizing: border-box;padding: 10rpx;}}.zanwu_list{width: 100%;text-align: center;padding-top: 50rpx;}.InitialRecord_details_back_btn{width: 100%;background-color: #81D3F8;color: #fff;}
}

父组件 改变 子组件 样式

// 组件 jsComponent({externalClasses: ['class-active]});// 组件 wxml<view class="son-dom class-active"></view>// 父页面 wxml<sondom class-active='make_matters_no_content'/>// class名不能使用驼峰,否则不生效 // 如果要重写子组件中的属性,需要 !important.make_matters_no_content{background: red!important;}

微信小程序中跳转另一个小程序

// 一wx.navigateToMiniProgram({appId: 'wx111a111111a1aa11',  //appidpath: '/pages/view/index',//pathextraData: { }, // 参数envVersion: 'develop', // 开发版 develop、体验版 trial、正式版 release  success(res) {// 打开成功console.log('成功')}
})
// 二
<navigator target="miniProgram" open-type="navigate" app-id="" path="" version="release">
</navigator>

微信小程序原生开发 记录相关推荐

  1. 【微信小程序-原生开发】实用教程08 - 开通微信云开发,操作云数据库新增数据(含修改数据权限),初始化云服务(含获取微信云环境 id),获取云数据,滚动公告栏

    开始前,请先完成圆梦宝典中宫格导航的开发,详见 [微信小程序-原生开发]实用教程 07 - Grid 宫格导航,详情页,侧边导航(含自定义页面顶部导航文字) https://blog.csdn.net ...

  2. 微信小程序原生开发功能合集一:微信小程序开发介绍

    一.专栏介绍   本专栏主要内容为微信小程序常用功能开发过程的介绍说明,包括开发微信小程序常用组件的封装.常用功能的开发等,提供源代码.开发过程讲解视频.完整的课程等.   组件封装: 下拉选择组件. ...

  3. 【微信小程序-原生开发】实用教程20 - 生成海报(实战范例为生成活动海报,内含生成指定页面的小程序二维码,保存图片到手机,canvas 系列教程)

    可在系列教程的基础上继续开发,也可以单独使用 [微信小程序-原生开发]系列教程 效果预览 代码实现 点击触发生成海报 在活动详情页,指定点击某图标/按钮,触发跳转到生成海报的页面 pages\comp ...

  4. 微信小程序 原生开发 实现弹窗遮罩层 并且在遮罩层内使用scroll-view实现滚动内容(包括图片)

    微信小程序 原生开发 实现弹窗遮罩层 并且在遮罩层内可以滚动内容(包括图片) 效果图 这里的遮罩层内容由两张图片构成 底图+内部内容 实现代码 wxml 使用云开发的存储,自己开发的时候换掉src即可 ...

  5. 【微信小程序-原生开发】实用教程06-轮播图、分类页签 tab 、成员列表(含Tdesign升级,切换调试基础库,设置全局样式,配置组件按需注入,添加图片素材,wx:for,生命周期 onLoad)

    开始前,请先完成首页的开发,详见 [微信小程序-原生开发]实用教程05-首页(含自定义调试模式.插入图片.图文排版.底部留白.添加本地图片) https://blog.csdn.net/weixin_ ...

  6. 微信小程序原生开发集成IM服务出现无法找到模块“tim-wx-sdk”的声明文件问题解决

    微信小程序原生开发集成IM服务出现无法找到模块"tim-wx-sdk"的声明文件问题解决: 通过npm命令安装配置: 在终端进入到小程序项目根目录执行:npm install 未初 ...

  7. 【微信小程序-原生开发】实用教程09 - 可滚动选项,动态列表-步骤条(含事件传参),动态详情(含微信云查询单条数据 doc)

    开始前,请先完成圆梦宝典中滚动公告栏的开发,详见 [微信小程序-原生开发]实用教程 08 - 开通微信云开发,操作云数据库新增数据(含修改数据权限),初始化云服务(含获取微信云环境 id),获取云数据 ...

  8. 【微信小程序-原生开发】实用教程05-首页(含自定义调试模式、插入图片、图文排版、底部留白、添加本地图片)

    开始前,请先完成启动/欢迎/首屏广告页的开发,详见 [微信小程序-原生开发]实用教程04-启动/欢迎/首屏广告页(含倒计时.添加文字.rpx.定义变量和函数.读取变量.修改变量.wx.reLaunch ...

  9. 【微信小程序-原生开发】实用教程02-添加全局页面配置、页面、底部导航

    开始前,请先完成项目创建,详见 [微信小程序-原生开发]实用教程01-注册登录账号,获取 AppID.下载安装开发工具.创建项目.上传体验 前期准备 因我们的项目是根据模板创建的,需先清理掉无效的页面 ...

最新文章

  1. luogu P2613 【模板】有理数取余(费马小定理,乘法逆元)
  2. 面向对象语言的new操作
  3. protobuf + maven 爬坑记
  4. ThreadLocal 详解
  5. 【数论】挖掘机技术哪家强(jzoj 3858)
  6. Apache Digester示例–轻松配置
  7. owncloud搭建过程
  8. yum安装Jenkins
  9. 关于C#中Thread.Join()的一点理解
  10. Atitit.aticmd v4  新特性q39 添加定时器释放功能
  11. 学生如何提高专业英文阅读能力(转自施一公博客)
  12. 如何成就一个小而美的存储科技公司?
  13. 自定义微博小尾巴 源码+解析
  14. Moses安装全记录
  15. 面试指导:情景处理与应变题常见问题
  16. 8-1 用QPainter绘图(Painting with QPainter)
  17. 旺店通与金蝶云星空对接集成采购入库单接口
  18. 2022国际版多语言多商户智能机器人在线客服源码配置文档
  19. 2022 全球程序员薪酬报告,字节在榜,上海收入最高!
  20. mt6592android7,0.3GHz究竟差多少 MT6592三兄弟实测解析

热门文章

  1. Python学习之集合常用方法
  2. 分布式数据库中间件Mycat2
  3. WebServie 基础
  4. nfs挂载不上,指定版本挂载
  5. word文档图标变成白色
  6. 2、用Kettle生成日期维度数据(一)使用kettle生成2019年日期文件保存到hive表中
  7. 单身程序猿告别单身的必备利器
  8. Visual Studio找不到 Windows SDK 版本10.0.17134.0的解决办法
  9. 新blog开张...
  10. 福建省计算机二级试题,福建省高等学校计算机等级考试(二级C语言)选择题试题库.doc...