# 原生微信小程序 **Repository Path**: javafdx/native-wechat-applet ## Basic Information - **Project Name**: 原生微信小程序 - **Description**: 原生微信小程序-项目(云音乐) - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-04-26 - **Last Updated**: 2022-07-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: JavaScript ## README ### 微信公众平台注册(获取 appid) 个人开发者--免费 企业开发者-- 300 一年 不同:主要(没有微信支付功能)没有附近推广 ### weixin 小程序插件 1. wxml Language Service 2. 小程序开发助手 3. wechat-snippet ### 创建项目 1. 填写项目名称 2. 项目路径 3. appID (公众平台后台--开发--开发管理-开发设置) #### setData 双向绑定 ``` {{message}} {{item}} 当前计数器:{{counter}} -------------------------------------- // index.js // 获取应用实例 Page({ data: { message: "你好啊,李银河", movies: [ "大话西游", "星际穿越", "不良热" ], counter: 0 }, changeMessage: function () { // 不能动态 // this.data.message = "hello world" // 类似react this.setState() this.setData({ message: "hello world" }) }, handleIncrement: function () { this.setData({ counter: this.data.counter + 1 }) }, handleDecrement: function () { this.setData({ counter: this.data.counter - 1 }) } }) ------------------------------------ /**index.wxss**/ .title { color: red; font-size: 40rpx; } ``` 知识点: setData是同步还是异步的 1. 在设置data数据上,是同步的 2. 通过最新的数据对wxml进行渲染,渲染的过程是异步的 #### 用 vscode 打开项目 1. 不安装插件(wxml)不高亮 #### 使用框架-生成tabBar(app.json) #### 请求服务地址问题 http://123.207.32.32:9001 不在以下 request 合法域名列表中 1. 添加ip (后台添加)正式上线时环境 2. 测试环境适用 详情--本地配置--不校验域名 #### 封装请求函数 service--index.js #### 封装类似vue2中的filter过滤函数 utils--format.wxs(不支持es6语法) ``` // commonjs es5导出--不支持es6 module.exports = { formatCount: formatCount } ------------------ 导入使用 {{format.formatCount(item.playCount)}} ``` #### 新建组件Component 1. 注册 index.json ``` { "usingComponents": { "video-item-v1": "/components/video-item-v1/index" } } ``` 注意:子组件接受参数的默认值是value: {} ``` properties: { item: { type: Object, value: {} } }, ``` #### 配置下拉刷新 index.json ``` { "enablePullDownRefresh": true, "backgroundTextStyle": "dark", } ``` #### 安装ui库vant 1. 终端--> npm init -y 2. npm install @vant/weapp 3. 详情---勾选--使用npm模块 4. 工具--构建npm(会生成miniprogram_npm文件) 5. 在相应页面进行组件注册 ``` { "usingComponents": { "van-search": "@vant/weapp/search/index" } } ``` #### 组件样式覆盖 ``` .van-search__content { background-color: #fff !important; } ``` #### 组件的插槽实现 1. 默认插槽和自定义插槽的解决方案: ``` .header .slot:empty + .default { display: flex; } ``` .header .slot:empty 子节点是否为空 .header .slot:empty + .default 如果为空,就改变default节点 2. 多个插槽(需要设置定义) options: { multipleSlots: true } #### 多页面共享数据和事件(跨页面的通信) 1. 要必须是响应式的 app.js--globalData()是做不到这一点的 2. 安装使用 安装 npm install hy-event-store ``` const { HYEventStore } = require("hy-event-store") const axios = require("axios") // 创建Store对象 const store = new HYEventStore({ state: { // 本地数据 name: "why", age" 18, // 网络数据 banners: [], recommends: [] }, actions: { // ctx 上下文 payload参数 getHomeDataAction(ctx, payload) { // 发送网络请求 axios.get("http://123.207.32.32:8000/home/multidata").then(res => { ctx.banners = res.data.data.banner ctx.recommends = res.data.data.recommend }) } } }) // app启动--调用actions共享事件 store.dispatch("getHomeDataAction", 123) // page1页面--获取并监听 store.onState("name", (res) => { console.log(res) }) // page2页面--改变赋值 setTimeout(() => { store.setState("name", "kobe") }, 1000) // 第一次会获取数据--也会监听改变 store.onState("banners", (res) => { console.log(res) }) ``` 注意: 每次安装依赖 都要重新构建一下 #### 获取机型信息(屏幕宽高) app.js 1. 存放到全局变量globalData 2. 获取 const app = getApp() data: { screenWidth: app.globalData.screenWidth }, 3. 或者直接获取(组件) data: { statusBarHeight: getApp().globalData.statusBarHeight } #### 子组件事件--父组件监听 子组件: this.triggerEvent("click",参数) 父组件: ``` ``` #### dom元素--事件传递参数 data-index="{{index}}" data-自定义="{{index/item}}"都可以 取值--事件(event) { dataset: { 自定义: '' } } event.currentTarget.dataset #### 自定义导航栏(不使用默认的微信导航) 在对应页面的index.json中配置 { "navigationStyle": "custom" } #### 组件的生命周期 lifetimes: { ready: function() { } }