微信小程序学习笔记(1) -- 基础知识入门

简介: 微信小程序学习笔记(1) -- 基础知识入门

微信小程序


一、简单了解


1.常用api


<https://developers.weixin.qq.com/miniprogram/dev/framework/quickstart/#%E4%BD%93%E9%AA%8C%E5%B0%8F%E7%A8%8B%E5%BA%8F>


官方示例源码地址:


<https://github.com/wechat-miniprogram/miniprogram-demo>


1dc618a0ed9580ce8bfa6facb208c08f.png5d4c6812c8535adbb050f4ddf2e1bce8.png46a9d80a6e05e4e3b19d57a0ee70bcdf.png


pages每个文件夹就是一个页面:


2.常用ui地址


https://weui.io/#

1dc618a0ed9580ce8bfa6facb208c08f.png


二、微信小程序应用配置


根目录


app.json界面外观


https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html


"backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "WeChat",
    "navigationBarTextStyle":"black"
 }

1dc618a0ed9580ce8bfa6facb208c08f.png5d4c6812c8535adbb050f4ddf2e1bce8.png


pages


设置页面


window


设置导航栏,设置下拉刷新


debug:


debug: true 调试模式


app.js:


//app.js
var obj = {
  onLaunch: function () {
    // 展示本地存储能力
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)
    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
      }
    })
    // 获取用户信息
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
          wx.getUserInfo({
            success: res => {
              // 可以将 res 发送给后台解码出 unionId
              this.globalData.userInfo = res.userInfo
              // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
              // 所以此处加入 callback 以防止这种情况
              if (this.userInfoReadyCallback) {
                this.userInfoReadyCallback(res)
              }
            }
          })
        }
      }
    })
  },
  globalData: {
    userInfo: null
  }
}
//调用了一个App的方法
App(obj)
//调用App方法的作用是用来创建应用程序实例对象
//定义应用程序的声明周期事件

wxss


写一些样式的文件


页面结构


https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/page.html


log.json 覆盖app.json里面的全局外观配置。


page.json


页面中配置项在当前页面会覆盖 app.json 的 window 中相同的配置项。文件内容为一个 JSON 对象


注意: 只能设置 window的配置,不能设置pages和debug的参数


标签栏


在app.json中设置tabBar.


tabBar中list设置2-5个标签


"tabBar": {
      "list":[{
        "pagePath":"pages/index/index",
        "text": "首页"
      },
      {
        "pagePath": "pages/logs/logs",
        "text": "日志"
      }
      ]     
}


"tabBar": {
    "color": "#444",
    "SelectedColor": "#219BF3",
    "backgroundColor": "#e0e0e0",
    "borderStyle": "white",
    "position": "bottom",
    "list": [
      {
        "pagePath": "pages/index/index",
        "text": "首页",
        "iconPath":"images/1.png",
        "selectedIconPath":"images/3.png"
      },
      {
        "pagePath": "pages/logs/logs",
        "text": "日志",
        "iconPath": "images/1.png",
        "selectedIconPath": "images/3.png"
      }
    ]
  },

1dc618a0ed9580ce8bfa6facb208c08f.png


三、逻辑层与界面层分离架构


逻辑层:

1dc618a0ed9580ce8bfa6facb208c08f.png


界面层

5d4c6812c8535adbb050f4ddf2e1bce8.png


逻辑层的JavaScript


和普通的js的差别:


1:没有bom和dom


46a9d80a6e05e4e3b19d57a0ee70bcdf.png

66ba272a0bfc97be54a5fa679e3d5482.png


2:小程序的js有一些额外的成员


App 方法 用于定义应用程序实例对象


Page方法 用于定义页面对象


getApp 方法 用于获取全局应用程序对象


getCurrentPges 方法 用来获取当前页面的调用栈(数组,最后一个是当前页面)


wx对象 用来提供核心Api的:


专门的页面介绍:https://developers.weixin.qq.com/miniprogram/dev/api/


//console.log(wx)
小程序的js是支持commonjs规范的:
//const foo = require(’./utils/foo.js’)
//foo.say(‘world’)


演示: getApp


app.js中:


定义个foo方法:

1dc618a0ed9580ce8bfa6facb208c08f.png


index.js中:直接调用:


5d4c6812c8535adbb050f4ddf2e1bce8.png


打印结果如下:显示已经调用成功。


46a9d80a6e05e4e3b19d57a0ee70bcdf.png


演示 getCurrentPages()


66ba272a0bfc97be54a5fa679e3d5482.png88b9988b40447cb37c7e3c492d49867f.png


演示符合commonjs规范


在utils下建个foo.js


function say(msg){
  console.log('Hello' + msg)
}
//导出say方法
module.exports = {
  say: say
}


在app.js中调用:


1dc618a0ed9580ce8bfa6facb208c08f.png


看下运行效果:


5d4c6812c8535adbb050f4ddf2e1bce8.png


总结就是: 一个export 一个 require


不支持export.xxx;只支持module.exports


演示 wx对象


在app.js中


console.log(wx)


效果:

1dc618a0ed9580ce8bfa6facb208c08f.png


界面层(数据绑定)


数据绑定


数据绑定–元素上绑定


index模块


//index.js
//获取应用实例
const app = getApp()
Page({
  //为页面提供数据的
  //data就是界面和逻辑之间的桥梁
  data: {
    message: 'Hello World',
    person:{
      name:"小胡"
    }  
  }
})


<!--index.wxml-->
<!-- 框架最大的特点,就是让我们开发者必须按照特定的方式编写代码 -->
<!--
  1.数据在哪 (当前页面对象的data 属性中)
  2.绑定到哪里去(想绑定到哪就在哪里用mustche语法输出)
 -->
<view class="container">
    <!-- 这种{{}}的语法叫做小胡子语法 -->
    <text>{{message}}</text>
    <text>{{person.name}}</text>
</view>


页面效果:


5d4c6812c8535adbb050f4ddf2e1bce8.png


数据绑定–属性上绑定数据


46a9d80a6e05e4e3b19d57a0ee70bcdf.png


/**index.wxss**/
.hello{
  width: 100px;
  height: 100px;
  background-color: pink;
}


看下效果:

1dc618a0ed9580ce8bfa6facb208c08f.png


源码地址:


https://github.com/hufanglei/wx-demo/tree/attr-bind


数据绑定–属性上绑定数据–拼接数据



5d4c6812c8535adbb050f4ddf2e1bce8.png


注意: world后面有空格。


/**index.wxss**/
.hello{
  width: 100px;
  height: 100px;
  background-color: pink;
}
.world  {
  background-color:yellow;
}


效果:


1dc618a0ed9580ce8bfa6facb208c08f.png


数据绑定–知识补充


1.在{{}}中写字符串


<view class="world {{ viewClassName }}">
  <text>{{ 'hello' }}</text>
</view>


效果(hello不是变量):


5d4c6812c8535adbb050f4ddf2e1bce8.png


2.计算变量


<text>{{ 111 }}</text>
<text>{{ 111 + 999 }}</text>


3.{{}} 可以解决 语法解析 true /fasle 出现bug的问题


举例说明:


<!--index.wxml-->
<!-- 框架最大的特点,就是让我们开发者必须按照特定的方式编写代码 -->
<!--
  1.数据在哪 (当前页面对象的data 属性中)
  2.绑定到哪里去(想绑定到哪就在哪里用mustche语法输出)
 -->
<view class="container">
<!-- 这种{{}}的语法叫做小胡子语法 -->
<text>{{message}}</text>
<text>{{person.name}}</text>


<!-- mustache 语法可以用在:

1. innerHTML(类似)

2. 元素的属性上

  不能用在标签名和属性名上

-->

<view class="world {{ viewClassName }}"></view>


<!-- 可以使用字面量和简单的逻辑运算符 -->
<text>{{ 'hello' }}</text>
<text>{{ 111 }}</text>
<text>{{ 111 + 999 }}</text>
<text>{{ 100 > 50 ? '你对了' : '你错了'}}</text>
<!--

当语法解析误解了 true/ false

可以使用{{}} 解决

-->
<checkbox checked="{{ false }}">
</checkbox>
</view>


不加{{}}就会出现问题


<checkbox checked="false">
</checkbox>


居然选中了!!


解决方式就是: false外面包一层 {{}}


列表渲染


1: 明确页面结构的循环体


2:删除多余的重复内容,只保留一个


3:在剩下的这个价格wx:for属性,属性值等于要遍历的数据源,数据源是数组


4:在这个标签(循环体)内部使用item代表当前被遍历的元素


给被遍历的对象定义名称 wx:for-item


给遍历的下标(索引) 定义名称 wx:for-index


代码演示:


<!--index.wxml-->
<!-- 框架最大的特点,就是让我们开发者必须按照特定的方式编写代码 -->
<!--
  1.数据在哪 (当前页面对象的data 属性中)
  2.绑定到哪里去(想绑定到哪就在哪里用mustche语法输出)
 -->
<view class="container">
<!-- 这种{{}}的语法叫做小胡子语法 -->
<text>{{message}}</text>
<text>{{person.name}}</text>
<!-- mustache 语法可以用在:
1. innerHTML(类似)
2. 元素的属性上
   不能用在标签名和属性名上
-->
<view class="world {{ viewClassName }}"></view>
<!-- 可以使用字面量和简单的逻辑运算符 -->
<text>{{ 'hello' }}</text>
<text>{{ 111 }}</text>
<text>{{ 111 + 999 }}</text>
<text>{{ 100 > 50 ? '你对了' : '你错了'}}</text>
<!-- 
当语法解析误解了 true/ false
可以使用{{}} 解决
-->
<checkbox checked="false">
</checkbox>
<!-- 列表数据渲染 -->
<!-- <view>
    <view>
      <checkbox></checkbox>
      <text>JavaScript</text>
    </view>
    <view>
      <checkbox checked="{{true}}"></checkbox>
      <text>HTML</text>
    </view>
    <view>
      <checkbox></checkbox>
      <text>CSS</text>
    </view>
</view> -->
    <view wx:for="{{ todos }}" >
      <checkbox checked="{{item.completed}}"></checkbox>
      <text>{{item.name}}</text>    
    </view>  
  如果全局属性中有item这种关键词,可以使用wxlfor-item去给当前遍历数据起别名
    <view wx:for="{{ todos }}" wx:for-item="aaa">
      <checkbox checked="{{aaa.completed}}"></checkbox>
      <text>{{aaa.name}}</text>
    </view>


拿序号

 

<view wx:for="{{ todos }}" wx:for-item="aaa" >
      <checkbox checked="{{aaa.completed}}"></checkbox>
      {{index}}
      <text>{{aaa.name}}</text>
    </view>    
拿序号并起别名
    <view wx:for="{{ todos }}" wx:for-item="aaa"  wx:for-index="i" >
      <checkbox checked="{{aaa.completed}}"></checkbox>
      {{i}}
      <text>{{aaa.name}}</text>
    </view>    
打印九九乘法表
<view wx:for="{{[1,2,3,4,5,6,7,8,9]}}" wx:for-item="i">
  <view wx:for="{{[1,2,3,4,5,6,7,8,9]}}" wx:for-item="j">
  <!-- wx:if 是用来根据一个bool值决定显示或隐藏 -->
      <view wx:if="{{i <= j}}">
          {{i}} * {{j}} = {{i * j}}
      </view>
  </view>
</view> 
<!-- 
1: 明确页面结构的循环体
2:删除多余的重复内容,只保留一个
3:在剩下的这个价格wx:for属性,属性值等于要遍历的数据源,数据源是数组
4:在这个标签(循环体)内部使用item代表当前被遍历的元素
给被遍历的对象定义名称 wx:for-item
给遍历的下标(索引) 定义名称 wx:for-index
 -->
</view>


显示效果如下:


1dc618a0ed9580ce8bfa6facb208c08f.png




相关文章
|
1月前
|
存储 JSON 小程序
微信小程序入门之新建并认识小程序结构
微信小程序入门之新建并认识小程序结构
50 1
|
1月前
|
XML 小程序 JavaScript
小程序入门之项目配置说明和数据绑定
小程序入门之项目配置说明和数据绑定
40 1
|
3月前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
104 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
1月前
|
小程序 前端开发 JavaScript
小程序入门之认识view和text组件
小程序入门之认识view和text组件
51 0
|
5月前
|
小程序
微信小程序学习笔记(入门篇)
微信小程序学习笔记(入门篇)
65 0
|
5月前
|
监控 小程序 前端开发
基础入门-抓包技术&HTTPS协议&WEB&封包监听&网卡模式&APP&小程序
基础入门-抓包技术&HTTPS协议&WEB&封包监听&网卡模式&APP&小程序
171 0
|
5月前
|
移动开发 小程序 安全
基础入门-APP架构&小程序&H5+Vue语言&Web封装&原生开发&Flutter
基础入门-APP架构&小程序&H5+Vue语言&Web封装&原生开发&Flutter
|
1月前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
216 3
|
1月前
|
小程序 API
微信小程序更新提醒uniapp
在小程序开发中,版本更新至关重要。本方案利用 `uni-app` 的 `uni.getUpdateManager()` API 在启动时检测版本更新,提示用户并提供立即更新选项,自动下载更新内容,并在更新完成后重启小程序以应用新版本。适用于微信小程序,确保用户始终使用最新版本。以下是实现步骤: ### 实现步骤 1. **创建更新方法**:在 `App.vue` 中创建 `updateApp` 方法用于检查小程序是否有新版本。 2. **测试**:添加编译模式并选择成功状态进行模拟测试。
48 0
微信小程序更新提醒uniapp
|
3月前
|
小程序 前端开发 JavaScript
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
【避坑宝】是一款企业黑红名单吐槽小程序,旨在帮助打工人群体辨别企业优劣。该平台采用SpringBoot+MybatisPlus+uniapp+uview2等技术栈构建,具备丰富的注释与简洁的代码结构,非常适合实战练习与学习。通过小程序搜索“避坑宝”即可体验。
103 0
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序