初识微信小程序

文章目录

  • 2.初识微信小程序
        • 微信小程序:
  • 3.创建小程序 注册小程序账户 小程序工具功能介绍 以及小程序的目录结构分析
  • 4.小程序MINA框架介绍 wxml wxss pages逻辑层js 介绍 绑定数据、绑定属性、条件判断、循环渲染数据
      • MINA框架介绍
          • 微信小程序与H5的不同之处:
  • 5.微信小程序事件、方法、事件对象、方法传值、获取data数据、修改data数据、冒泡非冒泡事件
  • 6.微信小程序app.json配置视图样式、配置底部tab切换、页面跳转配置页面里面的.json文件
          • 页面跳转:
  • 7.微信小程序小小练习 小程序页面跳转传值、请求Api接口获取服务器数据【无人点餐系统菜品页面制作】
  • 8.微信小程序小小练习 解决图片显示问题、页面跳转、以及通过api接口获取详情页面数据 【无人点餐系统菜品详情页面制作】
  • 9.小程序wxParse插件 解析html数据 【解析无人点餐系统菜品详情页面html】
        • wxParse插件——解析HTML数据
  • 10.微信小程序中的模块化utils 以及全局app.js 配置无人点餐项目公共的api地址【配置无人点餐项目公共api】
  • 11.微信小程序中的WXS 脚本语言的使用
  • 12.微信小程序中的自定义组件 注册组件
          • view image text button
          • 自定义组件
  • 13.微信小程序中的自定义组件 父子组件 组件事件 父子组件传值
  • 14.微信小程序中的自定义组件 slot 子组件调用父组件的方法、父组件调用子组件的方法
    • 父组件给子组件传值
    • 父组件调用子组件的方法
    • 子组件执行父组件里面的方法
        • 组件模板
  • 15.微信小程序自定义toast组件代码讲解
  • 16.小程序view 结合scroll-view结合真实新闻客户端api实现上拉分页加载更多
  • 17.小程序view 结合scroll-view结合真实新闻客户端api实现上拉分页加载更多 重复请求 没有数据不请求
  • 18.微信小程序 导入小程序代码、导入代码片段 、官方组件介绍以及实现swiper组件
  • 19.微信小程序 video cover-view cover-image 组件的使用
        • cover-view
      • cover-image:看文档
  • 20.微信小程序基础内容组件 icon 、text 、rich-text、progress
  • 21.微信小程序表单组件 button checkbox form input label radio slider switch textarea 获取表单数据
        • 1.input
        • 2.checkbox
        • 3.radio
        • 4.switch
        • 5.form
  • 22.微信小程序表单组件 picker picker-view 实现日期 区域 联动选择
        • 1.普通选择器:
        • 2.时间选择器
        • 3.日期选择器
        • 4.省市区选择器
        • 5.多列选择器:mode = multiSelector最复杂
  • 23.微信小程序媒体组件 images显示图片以及实现多图预览功能
  • 24.微信小程序媒体组件camera、audio、video、live-player、live-pusher
        • 1.camera组件:
        • 2.audio组件:
        • 3.video
  • 25.open-data web-view 以及 canvas、map简单介绍
        • open-data
        • web-view
  • 26.用微信小程序 请求数据、拍照、上传图片 api实现图片上传功能
  • 27.用微信小程序 下载文件 保存文件 打开文件
  • 28.微信小程序中类似localStorage的数据缓存Api
  • 29.微信小程序获取位置、查看位置、选择位置、系统信息、网络状态、加速度计(摇一摇功能)、罗盘 API
  • 30.拨打电话、扫码、剪贴板、屏幕亮度、用户截屏事件、振动、手机联系人 API

2.初识微信小程序

官网:https://mp.weixin.qq.com/cgi-bin/wx
我的APP ID: 网站注册后可以知道

微信小程序:

小程序是一种新的开放能力,开发者可以快速地开发一个小程序。小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验。

微信公众号和小程序的主要区别?
1、定位不同(公众号服务于营销与信息传递,小程序面向产品与服务)
2、实现技术区别 (公众号基于H5(html5 vue angualr react ionic),小程序必须用小程序的语法开发)
3、用户体验 (小程序的用户体验要比 html5好一些,更接近原生app)
4、调用原生的能力 (微信公众号可以借助jssdk调用手机的摄像头拍照 ,调用扫描二维码等 能力有限。 小程序调用原生的能力非常强大,能实现几乎app能实现的所有功能) (调用原生的功能 *可以不开发app )
5、微信app上面的入口不一样

微信小程序的应用场景:
互联网+ 物联网+ 人工智能+
餐厅点餐+小程序
基于LBS小程序直接搜索附近的餐厅,进店用进行扫码点餐、支付。
无人点餐:
公交+小程序
公交车站放一个小程序二维码,扫一扫就知道公交什么时候来。
买电影票+小程序
进入小程序直接搜附近电影院下单搞定。
加油站缴费+小程序
加油下车排队缴费太麻烦,扫小程序不用下车就能解决。
火车上叫餐+小程序
不用去固定车厢点餐,扫座椅后背的小程序二维码下单,乘务员给你送来。
旅行+小程序
旅行酒店预订、周边攻略、目的地、游记等都可以在小程序里轻松搞定。
快递+小程序
一键打开快递小程序,查看自己的订单,查看快递送达的时间,查看宝贝现在的物流情况
医疗+小程序
用小程序,提前挂号、网上排队,就医后扫码支付,直接拿药
景区+小程序
扫描景点门票小程序的二维码,即可查看景区详情
零售+小程序
想吃个水果或吃点零食,直接搜索附近小程序下单,送货上门。

小程序开发文档、开发工具、开发指南、体验demo:
开发文档
https://developers.weixin.qq.com/miniprogram/dev/
开发工具
https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
体验demo
https://developers.weixin.qq.com/miniprogram/dev/demo.html?t=1477656485442

3.创建小程序 注册小程序账户 小程序工具功能介绍 以及小程序的目录结构分析

目录结构:

  • pages-所有页面
    首页index 业务逻辑.js wxml–html wxss-css
    登录脚本 多了一个配置文件json

  • utils
    工具js 模块化的东西

  • App.js
    全局的js文件 其他地方调用App 只需要用 const app=getApp(); 获取应用实例

  • App.json
    全局的配置文件 整个页面 导航条的颜色 底部菜单切换

  • app.wxss
    全局css文件

  • project
    项目配置文件 一般不改动

视图——wxml wxss
业务逻辑——js

4.小程序MINA框架介绍 wxml wxss pages逻辑层js 介绍 绑定数据、绑定属性、条件判断、循环渲染数据

MINA框架介绍

  • MINA(MINA IS NOT APP) 是在微信中开发小程序的框架。
  • MINA的目标是通过尽可能简单、高效的方式让开发者可以在微信中开发具有原生APP体验的服务。
  • MINA提供了自己的视图层描述语言WXML和WXSS,以及基于JavaScript的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,可以让开发者可以方便的聚焦于数据与逻辑上。
  • MINA的核心是一个响应的数据绑定系统。
  • 整个系统分为两块视图层(View)和逻辑层(App Service)
  • MINA可以让数据与视图保持同步非常简单。当做数据修改的时候,只需要在逻辑层修改数据,视图层就会做相应的更新
  • MINA是腾讯给微信小程序命名的框架,其实他实际上应用的是目前IT界最被推崇的MVVM模式。
微信小程序与H5的不同之处:

view=div
text=span
没有ul li

Page({

  /**
   * 页面的初始数据
   */
  data: {

  },

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

  },

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

  },

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

  },

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

  },

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

  },

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

  },

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

  },

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

  }
})

数据绑定与Vue差不多
有判断条件


绑定属性
 放上去看一下
循环数据——简单数组

  
      {{index}}-----{{item}}
  

循环数据——数组里面有对象

  
      {{index}}-----{{item.title}}
  

嵌套循环
使用 wx:for-item 可以指定数组当前元素的变量名,
使用 wx:for-index 可以指定数组当前下标的变量名:


  
      {{item.cate}}

      
      -------{{item.title}}
      
  



  
      {{item.cate}}

      
      -------{{car.title}}
      
  

5.微信小程序事件、方法、事件对象、方法传值、获取data数据、修改data数据、冒泡非冒泡事件

不可以使用alert方法
自定义方法与data同级

没有br换行

执行方法的几种写法:
1.在生命周期函数里面调用方法
this.run()

2.
注意触发方法不需要写()

3.获取data的数据
console.log(this.data.msg);

4.改变data的数据

his.setData({
      msg:'我是改变后的msg'
    })

MVVM:是Model-View-ViewModel的简写,将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。

事件对象:原生js相似 鼠标按下的当前DOM节点和一切的相关信息
获取自定义属性的值

 doEventFn(e){
    console.log(e);
    console.log(e.currentTarget.dataset.aid);
  }

小程序里面执行方法传值——在view视图层执行方法传值
不能直接传值 需要靠event 事件对象

requestViewData(event){
    console.log(event.currentTarget.dataset);
  }

冒泡与非冒泡事件

事件分类
事件分为冒泡事件和非冒泡事件:
冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。 bindtap
非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。 catchtap

6.微信小程序app.json配置视图样式、配置底部tab切换、页面跳转配置页面里面的.json文件

app.json的配置和使用:
1.pages配置路由、windows显示效果、底部tab切换
导航条只支持黑色和白色
1、小程序里面的资源不能大于2M

2、底部tab切换菜单最少2个最多5个

 "tabBar": {
    "color":"#666",
    "selectedColor":"#f60",
    "backgroundColor":"#eee",
    "borderStyle":"white",
    "position":"bottom",
    "list": [
      {
        "pagePath": "pages/index/index",
        "text": "首页",
        "iconPath":"static/images/home1.png",
        "selectedIconPath":"static/images/home.png"
      },
      {
        "pagePath": "pages/news/news",
        "text": "新闻",
        "iconPath":"static/images/news1.png",
        "selectedIconPath":"static/images/news.png"
      },
      {
        "pagePath": "pages/user/user",
        "text": "用户",
        "iconPath": "static/images/user1.png",
        "selectedIconPath": "static/images/user.png"
      }
    ]
  }
页面跳转:

从一个页面跳转到另一个页面

  goShop(){
    wx.navigateTo({
      url: '../shop/shop'
    })
  }

7.微信小程序小小练习 小程序页面跳转传值、请求Api接口获取服务器数据【无人点餐系统菜品页面制作】

页面跳转传值:



goFoodContent(event){
    console.log(event.currentTarget.dataset.aid);
    var aid = event.currentTarget.dataset.aid;
    wx.navigateTo({
      url: '../foodcontent/foodcontent?aid='+aid
    })
  }

跳转到的页面来监听上个页面传过来的值

	onLoad: function (options) {
    //获取上一个页面的传值
    console.log(options);
  }

请求数据:
wx.request
WX样式的字体有另一种单位——移动端一般喜欢用rem
rpx(responsive pixel): 可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。
一般移动端设计:宽度自适应,高度按照设计稿的一半

获取数据在嵌套循环

requestData(){
    var that = this;
    wx.request({
      url: 'http://a.itying.com/api/productlist', // 仅为示例,并非真实的接口地址
      data: {

      },
      header: {
        'content-type': 'application/json' // 默认值
      },
      success(res) {
        console.log(res.data);
        //用this需要注意this箭头指向
       that.setData({
          list:res.data.result
        })
      }
    })
  }

列表:http://a.itying.com/api/productlist

详情:http://a.itying.com/api/productcontent?id=5ac1a22011f48140d0002955

8.微信小程序小小练习 解决图片显示问题、页面跳转、以及通过api接口获取详情页面数据 【无人点餐系统菜品详情页面制作】

网络图片获取显示:
网络图片地址:\这个斜杠不可以解析
1.服务器数据返回时就将斜杠改为/
2.客户端解决

 requestData(){
    var that = this;
    wx.request({
      url: 'http://a.itying.com/api/productlist', // 仅为示例,并非真实的接口地址
      data: {

      },
      header: {
        'content-type': 'application/json' // 默认值
      },
      success(res) {
        console.log(res.data);
        //替换 \ /
        var arr = res.data.result;

        for(var i = 0; i < arr.length; i++){
          for (var j = 0; j < arr[i].list.length; j++){
            arr[i].list[j].img_url = arr[i].list[j].img_url.replace(/\\/g,'/');-----用了正则表达式
          }
        }
        //用this需要注意this箭头指向
        that.setData({
          list:arr
        })
      }
    })
  }

地址改为本地地址:

 host:'http://a.itying.com/'

列表:http://a.itying.com/api/productlist

详情:http://a.itying.com/api/productcontent?id=5ac1a22011f48140d0002955

9.小程序wxParse插件 解析html数据 【解析无人点餐系统菜品详情页面html】

web-view远程页面在服务器端 但是有局限性

wxParse插件——解析HTML数据

1、找到demo
https://github.com/icindy/wxParse

2、下载这个demo

3、把demo里面的wxParse目录 拷贝到我们的项目里面

4、在我们要用到的页面的js里面引入 wxParse下面的js

      var WxParse = require('../../wxParse/wxParse.js');
数据绑定
      var article = '
我是HTML代码
'; //article是需要渲染的html代码 /** * WxParse.wxParse(bindName , type, data, target,imagePadding) * 1.bindName绑定的数据名(必填) * 2.type可以为html或者md(必填) * 3.data为传入的具体数据(必填) * 4.target为Page对象,一般为this(必填) * 5.imagePadding为当图片自适应是左右的单一padding(默认为0,可选) */ var that = this; WxParse.wxParse('article', 'html', article, that, 5);

5、可以在app.wxss引入 wxParse.wxss

	@import "wxParse/wxParse.wxss";

6、模板 wxml引入下面代码

         
          //这里data中article为bindName