精华内容
下载资源
问答
  • 一篇文章彻底了解小程序

    千次阅读 多人点赞 2018-05-23 13:51:50
    小程序 基础知识 HTML5 教程 CSS3 教程 ECMAScript 6 入门 微信小程序官网 微信小程序 API 支付宝小程序官网 支付宝小程序 API 小程序实现原理 微信 iOS 运行在 webkit(苹果开源的浏览器内核),...

    小程序

    基础知识

    小程序实现原理

    • 微信

    iOS 运行在 webkit(苹果开源的浏览器内核),Android 运行在 X5(QQ浏览器内核)。

    • 支付宝

    • 小程序调用系统的 API

    Android 可以参考 JsBridge,iOS 可以参考 WebViewJavascriptBridge

    • 小程序的架构

    这里写图片描述

    小程序与 Android & iOS 对比

    • 生命周期

    这里写图片描述

    • 数据存储

    Android:SQLite、Realm、SharedPreferences、File

    iOS:SQLite、Realm、plist、归档、NSUserDefaults、File

    微信小程序:localStorage、File

    支付宝小程序:localStorage

    • 网络

    Android:OkHttp、Volley

    iOS:Alamofire

    微信小程序:wx.request()

    支付宝小程序:my.httpRequest()

    项目结构

    |-ProjectName
        |-component//template,组件
            |-common-button
        |-config
        |-images
        |-pages//页面
            |-home 
                |-home.acss/wxss
                |-home.axml/wxml
                |-home.js
                |-home.json
        |-utils
        |-app.acss/wxss
        |-app.js
        |-app.json
    
    • App

    微信小程序

    App({
      onLaunch: function(options) {
        // Do something initial when launch.
      },
      onShow: function(options) {
          // Do something when show.
      },
      onHide: function() {
          // Do something when hide.
      },
      onError: function(msg) {
        console.log(msg)
      },
      globalData: 'I am global data'
    })
    

    支付宝小程序

    App({
      onLaunch(options) {
        // 小程序初始化
      },
      onShow(options) {
        // 小程序显示
      },
      onHide() {
        // 小程序隐藏
      },
      onError(msg) {
        console.log(msg)
      },
      globalData: {
        foo: true,
      }
    })
    
    • Page

    微信小程序

    Page({
      data: {
        text: "This is page data."
      },
      onLoad: function(options) {
        // Do some initialize when page load.
      },
      onReady: function() {
        // Do something when page ready.
      },
      onShow: function() {
        // Do something when page show.
      },
      onHide: function() {
        // Do something when page hide.
      },
      onUnload: function() {
        // Do something when page close.
      },
      // Event handler.
      viewTap: function() {
        this.setData({
          text: 'Set some data for updating view.'
        }, function() {
          // this is setData callback
        })
      },
      customData: {
        hi: 'MINA'
      }
    })
    

    支付宝小程序

    Page({
      data: {
        title: "Alipay"
      },
      onLoad(query) {
        // 页面加载
      },
      onReady() {
        // 页面加载完成
      },
      onShow() {
        // 页面显示
      },
      onHide() {
        // 页面隐藏
      },
      onUnload() {
        // 页面被关闭
      },
      viewTap() {
        // 事件处理
        this.setData({
          text: 'Set data for updat.'
        })
      },
      go() {
        // 带参数的跳转,从 page/index 的 onLoad 函数的 query 中读取 xx
        my.navigateTo('/page/index?xx=1')
      },
      customData: {
        hi: 'alipay'
      }
    })
    
    • localStorage

    微信小程序

    //同步保存数据
    wx.setStorageSync({
      key:"key",
      data:"value"
    })
    
    wx.getStorageSync({key: 'key'})//同步读取数据
    wx.removeStorageSync('key')//同步删除数据
    

    支付宝小程序:my.httpRequest()

    //同步保存数据
    my.setStorageSync({
      key:"key",
      data:"value"
    })
    
    my.getStorageSync({key: 'key'})//同步读取数据
    my.removeStorageSync('key')//同步删除数据
    
    • 网络请求

    微信小程序:wx.request()

    wx.request({
      url: 'http://xxx.xx',
      data: {
         x: '' ,
         y: ''
      },
      header: {
          'content-type': 'application/json'
      },
      success: function(res) {
        console.log(res.data)
      },
      fail: function(res) {
        console.log(res.data)
      },
      complete: function(res) {
        console.log(res.data)
      }
    })
    

    支付宝小程序:my.httpRequest()

    my.httpRequest({
      url: 'http://xxx.xx',
      method: 'POST',
      data: {
        x: '' ,
        y: ''
      },
      dataType: 'json',
      success: function(res) {
        my.alert({content: 'success'});
      },
      fail: function(res) {
        my.alert({content: 'fail'});
      },
      complete: function(res) {
        my.alert({content: 'complete'});
      }
    });
    

    小程序的特点

    1. 提前新建 WebView,准备新页面渲染。
    2. View 层和逻辑层分离,通过数据驱动,不直接操作 DOM。
    3. 使用 Virtual DOM,进行局部更新。
    4. 全部使用 https,确保传输中安全。
    5. 前端组件化开发。
    6. 加入 rpx 单位,隔离设备尺寸,方便开发。

    小程序的不足

    1. 小程序仍然使用 WebView 渲染,并非原生渲染
    2. 需要独立开发,不能在非微信/支付宝环境运行。
    3. 开发者不可以扩展新组件。
    4. 服务端接口返回的头无法执行,比如:Set-Cookie。
    5. 依赖浏览器环境的 js 库不能使用,因为是 JSCore 执行的,没有 window、document 对象。
    6. WXSS/ASS 中无法使用本地(图片、字体等),ASS 可以使用本地图片。
    7. WXSS/ASS 转化成 js 而不是 css,为了兼容 rpx。
    8. WXSS/ASS 不支持级联选择器。
    9. 小程序无法打开页面,无法拉起 APP。

    更多文章

    https://github.com/jeanboydev/Android-ReadTheFuckingSourceCode

    我的公众号

    欢迎你「扫一扫」下面的二维码,关注我的公众号,可以接受最新的文章推送,有丰厚的抽奖活动和福利等着你哦!?

    如果你有什么疑问或者问题,可以 点击这里 提交 issue,也可以发邮件给我 jeanboy@foxmail.com

    同时欢迎你 Android技术进阶:386463747 来一起交流学习,群里有很多大牛和学习资料,相信一定能帮助到你!

    展开全文
  • 方法 / 步骤 不让被人看见自己的那年今日,进入qq空间 打开那年今日 点击后面的齿轮 勾选【不在那年今日展示我的动态】,然后点击确定,别人就看不见了 ...

    方法 / 步骤

    不让被人看见自己的那年今日,进入qq空间

    打开那年今日

    点击后面的小齿轮

    勾选【不在那年今日展示我的动态】,然后点击确定,别人就看不见了

    展开全文
  • 项目是通过web-view内嵌在小程序里的vue单页应用.然而前几天发现明明发布了代码,在小程序入口进去看到的还是旧页面,尝试了各种操作: 手动退出小程序,再次进入; 删除 发现-小程序,重新进入; 关闭...

    image.png

    前言

    项目是通过web-view内嵌在小程序里的vue单页应用.然而前几天发现明明发布了代码,在小程序入口进去看到的还是旧页面,尝试了各种操作:

    • 手动退出小程序,再次进入;

    • 删除 发现-小程序,重新进入;

    • 关闭微信,杀掉进程,重新进入

    • 修改 Nginx 关于 Cache-Control 的配置;

    • 用 debugx5.qq.com 手动清除安卓微信浏览器缓存;

    • iOS 利用微信自带清除缓存功能。
      不管怎么操作,依然显示的是旧页面!!! image.png

    分析原因

    这个缓存是存在哪里的呢?
    一般情况下,浏览器缓存是个非常有用的特性,它能够提升性能、减少延迟,还可以减少带宽、降低网络负荷。
    浏览器的缓存机制可以总结成下面两句:

    1.浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识
    2.浏览器每次拿到返回的请求结果都会将该结果和缓存标识存入浏览器缓存中。

    而web-view组件就是嵌在小程序里的网页,它本质上是运行在微信内置浏览器里的,它在缓存上并没有完全遵照上述的规则,也即它的缓存并不能及时得到清理

    在小程序里面, web-view组件是通过一个url地址来访问h5页面的,如果内嵌 H5 的地址不发生变化,那么 web-view 访问资源会从缓存里取,而缓存里并没有最新的数据,这就导致了服务端的最新资源根本无法到达浏览器,这也就解释了为什么修改 Nginx 的 Cache-Control 配置也无法生效的原因。所以,要想彻底解决及时刷新,必须让 web-view 去访问新的地址。


    小结

    造成web-view无法刷新的原因:
    1.浏览器缓存;
    2.url地址被缓存

    解决方案

    原因找到了,那么如何解决呢?

    1.针对url地址没刷新的问题,可以在webview组件的src里面添加一个时间戳.

    src = `https://XXX.com?timestamp=${new Date().getTime()}`
    <web-view src='{{src}}'></web-view>
    

    url后面加时间戳这个,苹果机是可以实时解决缓存的,然而安卓机不行

    2. 在index.html的head头部添加不缓存的配置

    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="0" />
    

    3.在webpack打包的时候加上 hash配置

      filenameHashing: true,
      pages: {
        index: {
        // page 的入口
        entry: 'src/main.js',
        // 模板来源
        template: 'public/index.html',
        // 在 dist/index.html 的输出
        filename: 'index.html',
        // 当使用 title 选项时,
        // template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
        title: 'Index Page',
        hash: true,
        // 在这个页面中包含的块,默认情况下会包含
        // 提取出来的通用 chunk 和 vendor chunk。
        chunks: ['chunk-vendors', 'chunk-common', 'index']
        }
      },
    

    关于hash配置, 可以参考这篇文章:vue 开发常用工具及配置五:hash 与缓存控制

    4.使用工具debugtbs

    如果是安卓机, 可以在微信上打开http://debugtbs.qq.com, 然后将所有清除的按钮点击一遍,下次再进去就可以了。


    至此, 如果还是不能清除,其实也不用太担心,web-view再过一段时间(时间不定,一天或者几小时,无明显规律)是可以进行缓存刷新的,只是不能做到实时刷新, 有一说法是官方后台需要审核页面,具体不得而知了,感兴趣的小伙伴可以查查看,然后回来告诉我,静待佳音。

    推荐一个小工具

    web-view如何调试?

    1. 开发工具上在web-view页面内点击鼠标右键有个调试的选项

    2. 需要在真机上调试需要自行引入vconsole

    展开全文
  • 小程序

    2021-04-06 16:43:52
    微信小程序 准备工作 注册小程序帐号 ① 准备一个微信号(你如果还没有微信号,你out了,你是穿越来的吧) ② 申请小程序账号:https://mp.weixin.qq.com/wxopen/waregister?action=step1 获取开发密钥(appId) 在...

    微信小程序

    准备工作

    注册小程序帐号

    ① 准备一个微信号
    ② 申请小程序账号:https://mp.weixin.qq.com/wxopen/waregister?action=step1

    获取开发密钥(appId)

    在做项目时需要密钥

    公众平台登录小程序->开发->开发设置->AppID(小程序ID)

    安装开发工具

    开发工具,可以选择自己喜欢的,也可以选择微信工具,下载微信开发工具,微信开发工具可完成开发,调试,打包,部署的工作

    目录结构

    小程序包含一个描述整体程序的 app 和多个描述各自页面的 page

    默认的目录结构:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zqqkdD5X-1617698618518)(C:\Users\31759\AppData\Roaming\Typora\typora-user-images\1599034334559.png)]

    1、全局文件

    ​ app开头的文件名是全局文件(文件名不能),包括app.js、app.json、app.wxss。

    ​ app.js:是全局的js文件,里面的变量可以在任何地方使用。

    ​ app.json:是对小程序的全局配置。

    ​ app.wxss:是全局样式。

    2、页面级文件(pages文件夹下)

    ​ 如:pages/index下。index.js、index.json、index.wxml、index.wxss。这四个文件名必须一样。

    ​ index.js:页面js文件,启动后需要先执行【必须有】

    ​ index.json:页面配置文件。只能配置窗口项。决定当前窗口表现

    ​ index.wxml:页面布局文件,相当于html 【必须有】

    ​ index.wxss:页面样式文件。当index.wxss里的样式和全局的app.wxss的样式冲突时,以index.wxss为准。

    文件类型

    .wxml, .wxss, .json, .js 文件的作用

    ① WXML(WeiXin Markup Language)文件

    wxml模板:跟网页中的html是完成同样的功能。

    wxml和HTML的不同之处

    A. 标签名不同: wxml把常用的标签进行了封装,如:地图()等等

    B. 采用mvvm的模式(如同react和vue一样),js中不直接操作DOM,只操作数据,所以,wxml中就出现了类似于vue中的指令:如:wx:if等

    ② WXSS文件

    ​ 和网页开发中的css一样,但是进行了扩展.

    ​ wxss在css的基础上扩展了哪些?

    1、新增了尺寸单位。在写 CSS 样式时,开发者需要考虑到手机设备的屏幕会有不同的宽度和设备像素比,采用一些技巧来换算一些像素单位。WXSS 在底层支持新的尺寸单位 rpx ,开发者可以免去换算的烦恼,只要交给小程序底层来换算即可,由于换算采用的浮点数运算,所以运算结果会和预期结果有一点点偏差。

    2、提供了全局的样式和局部样式,你可以写一个 app.wxss 作为全局样式,会作用于当前小程序的所有页面,局部页面样式 page.wxss 仅对当前页面生效。

    3、此外 WXSS 仅支持部分 CSS 选择器,详细参考:https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxss.html

    ③ JS文件

    JS文件就是我们的js文件,完成交互的。

    ④ JSON文件

    配置文件:

    App.json:是小程序配置:

    https://developers.weixin.qq.com/miniprogram/dev/framework/quickstart/code.html#JSON-%E9%85%8D%E7%BD%AE

    project.config.json:工具配置

    page.json:页面配置

    开发文档

    框架 组件 API

    框架(mina框架)

    ​ 微信客户端给小程序所提供的环境为宿主环境,小程序的运行环境分成渲染层(webview)和逻辑层(jscore),WXML 模板和 WXSS 样式工作在渲染层,JS 脚本工作在逻辑层,小程序的渲染层和逻辑层分别由2个线程管理,这两个线程的通信会经由微信客户端

    配置

    全局配置

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

    app.json,对微信小程序进行全局配置(页面管理,窗口设置,网络请求)

    页面配置

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

    pagename.json,对本页面的窗口表现进行配置,覆盖全局

    项目环境配置

    sitemap.jsonproject.config.json

    1)、project.config.json是项目开发环境配置, 包括版本、依赖、程序名之类 。

    2)、sitemap.json: 配置小程序内的搜索, 当开发者允许微信索引时,微信会通过爬虫的形式,为小程序的页面内容建立索引 。 用户的搜索词条触发该索引时,小程序的页面将可能展示在搜索结果中。 爬虫访问小程序内页面时,会携带特定的 user-agent:mpcrawler场景值1129

    ​ 如果想全局禁用索引,配置project.config.json,在 setting内部添加checkSiteMap:false,

    wxml(官方组件)

    https://developers.weixin.qq.com/miniprogram/dev/component/

    1、视图容器(View Container)
    view 视图容器
    scroll-view 可滚动视图容器
    swiper 可滑动的视频容器

    2、基础内容(Basic Content)

    ​ icon 图标
    ​ text 文字
    ​ progress 进度条

    3、表单组件(From)

    ​ button 按钮
    ​ form 表单
    ​ input 输入框
    ​ checkbox 多项选择器
    ​ radio 单项选择器
    ​ picker 列表选择器
    ​ slider 滑动选择器
    ​ switch 开关选择器
    ​ label 标签

    4、操作反馈组件(Interaction)

    ​ action-sheet 上拉菜单
    ​ modal 模态弹框
    ​ toast 短通知

    5、导航(Navigation)

    ​ navigator 应用内跳转

    6、多媒体(Media)

    ​ audio 音频
    ​ image 图片
    ​ video 视频

    7、地图(Map)

    ​ map 地图

    8、画布(Canvas)

    wxss(样式)

    WXSS(WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式。

    WXSS 具有 CSS 大部分特性。同时为了更适合开发微信小程序,WXSS 对 CSS 进行了扩充以及修改。

    CSS 相比,WXSS 扩展的特性有:

    ​ 尺寸单位

    ​ 样式导入

    1、WXSS尺寸单位

    rpx尺寸单位可以根据屏幕宽度进行自适应。

    建议: 开发微信小程序时设计师可以用 iPhone6 作为视觉稿的标准

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NgDmIIF4-1617698618521)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps1.jpg)]

    如:

    ss

    bb

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fS3YEa0x-1617698618523)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps2.jpg)]

    2、WXSS样式导入

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ojcQGh7S-1617698618525)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps3.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lf5dt29E-1617698618526)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps4.jpg)]使用@import语句可以导入外联样式表,@import后跟需要导入的外联样式表的相对路径,用;表示语句结束。

    3、WXSS内联样式

    框架组件上支持使用 style、class 属性来控制组件的样式。

    style 接收动态的样式,在运行时会进行解析,请尽量避免将静态的样式写进 style 中,以免影响渲染速度。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8HQaTI5Q-1617698618527)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps5.jpg)]

    4、WXSS选择器

    目前支持的选择器有:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q0zMK3F6-1617698618528)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps6.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aW8BHdg7-1617698618528)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps7.jpg)]

    5、WXSS全局样式与局部样式

    ​ 定义在 app.wxss 中的样式为全局样式,作用于所有页面。在 page 的 wxss 文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖 app.wxss 中相同的选择器。

    js(逻辑)

    App()和page()

    App()是注册小程序的,Page() 是注册页面的,都接受一个 Object 参数,App() 必须在 app.js 中调用,Page()必须出现在页面.js中,必须调用且只能调用一次,都会给当前注册生命周期钩子,和实例成员(方法、属性)

    Object 参数

    • data:{} 数据
    • 钩子函数(参数){this 指向当前页面,当前小程序}
    • 自定义函数(){ this 指向当前页面,当前小程序 }
    • 自定义属性:值

    页面与主程通讯

    pages里面 let app=getApp(), app.实例属性|方法

    数据绑定

    WXML 中的动态数据均来自对应 Page 的 data。

    在WXML里使用双花括号即可。双括号里可以写变量,表达式(包括三元表达式)

    1、组件内容绑定使用(双花括号)将变量包起来

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hWMbeS54-1617698618529)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps9.jpg)]

    2、组件属性(需要在双引号之内,并写上双花括号)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mjfuUwLT-1617698618529)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps10.jpg)]

    列表渲染

    ​ 1)、wx:for 指令完成列表渲染。

    ​ 格式:wx:for="{{数组}}"

    ​ 默认数组的当前项的下标变量名默认为 index,当前项的变量名默认为 item

    ​ 如:<组件 wx:for="{{数据}}">{{item}}/{{index}}</组件>

    ​ 2)、自定义下标名和当前项的名字:

    ​ 使用 wx:for-item 可以指定数组当前元素的变量名,

    ​ 使用 wx:for-index 可以指定数组当前下标的变量名:

    ​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dWOAk4Q8-1617698618530)(C:\Users\31759\AppData\Roaming\Typora\typora-user-images\1599037117910.png)]

    ​ 3)、将 wx:for 用在标签上,以渲染一个包含多节点的结构块

    block 并不是一个组件,它仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性。

    条件渲染

    1)、wx:if 指令完成条件渲染

    <组件 wx:if="{{布尔数据}}"> 惰性渲染 (相当于vue的 v-if)

    wx:elif="{{}}"

    wx:else="{{}}"

    2)、hidden属性

    <组件 hidden="{{布尔数据}}" 适合频繁渲染 ,true表示隐藏,false表示显示 (相当于vue的 v-show)

    3)、也可以使用

    数据修改

    this.setData({key:value}),响应式的显示在view层,数据的修改结果是异步的

    注意:

    直接修改数据,不会响应式,如:this.data.属性 = 值 修改, view层不实时响应

    app.setData({key:value}) 修改的是主程app

    事件

    基本格式

    • 冒泡方式的绑定事件使用bind

    <组件 bindxxx="实例方法"></组件>

    xxx==原生移动端事件名(touchstart/touchend/touchcancel/touchmove/tap)

    • 不冒泡方式的绑定事件使用catch

    <组件 catchxxx="实例方法"></组件>

    事件对象

    直接在事件处理函数里声明形参既可以。

    如:

     //.wxml
     
     <text bindtap="clickMe" >点我</text>
     
     //.js
     
      clickMe(event){
          console.log(event);
          console.log(event.currentTarget);//就是当前事件源
      }
    

    传参

    ​ 事件处理函数传参时,在组件里写上属性 data-名 = “值”,在函数里,使用 event.currentTarget.dataset.参数名 获取数据。

    <组件 bindxxx="实例方法" data-参数名称="值"></组件>
    

    值: 字符

    //实例方法
    function(event){
        event.currentTarget.dataset.参数名称;
    }
    

    双向绑定

    <input value="{{ipt}}" bindinput="checkIpt"></input>

     checkIpt(e){
        this.setData({ipt:e.currentTarget.value});//双向绑定
      },
    

    生命周期钩子函数

    小程序生命周期

    https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html

    App(Object object)

    注册小程序。接受一个 Object 参数,其指定小程序的生命周期回调等。

    App() 必须在 app.js中调用,必须调用且只能调用一次。不然会出现无法预期的后果。

    onLaunch(Object object)
    小程序初始化完成时触发,全局只触发一次。参数也可以使用 wx.getLaunchOptionsSync 获取。
    参数:与 wx.getLaunchOptionsSync 一致

    onShow(Object object)
    小程序启动,或从后台进入前台显示时触发。也可以使用 wx.onAppShow 绑定监听。
    参数:与 wx.onAppShow 一致

    onHide()
    小程序从前台进入后台时触发。也可以使用 wx.onAppHide 绑定监听。

    页面的生命周期

    https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html

    属性类型默认值必填说明
    dataObject页面的初始数据
    onLoadfunction生命周期回调—监听页面加载
    onShowfunction生命周期回调—监听页面显示
    onReadyfunction生命周期回调—监听页面初次渲染完成
    onHidefunction生命周期回调—监听页面隐藏
    onUnloadfunction生命周期回调—监听页面卸载
    onPullDownRefreshfunction监听用户下拉动作
    onReachBottomfunction页面上拉触底事件的处理函数
    onShareAppMessagefunction用户点击右上角转发
    onShareTimelinefunction用户点击右上角转发到朋友圈
    onAddToFavoritesfunction用户点击右上角收藏
    onPageScrollfunction页面滚动触发事件的处理函数
    onResizefunction页面尺寸改变时触发,详见 响应显示区域变化
    onTabItemTapfunction当前是 tab 页时,点击 tab 时触发

    路由

    声明式路由

    组件:navigator

    属性: open-type

    值:

    • navigate,redirect 只能打开非 tabBar 页面

    • switchTab 只能打开 tabBar 页面。

    • reLaunch 可以打开任意页面

    • navigate 新+页面栈

    • redirect 会替换当前栈

    • navigateBack 当前页面出栈

    • switchTab 目标tabBar页面入栈 关闭其他所有非 tabBar 页面

    • reLaunch 全部出栈,目标页面栈入栈

    • exit 全部出栈,无进栈 target="miniProgram"时生效

    路由传参

    url="/pages/xx/xx?a=1&b=2" switchTab 不能传参数

    接参

    app.js onLaunch(options) options={a:1,b:2}

    pages.js onLoad(options) options={a:1,b:2}

    编程式路由

    1)、wx.redirectTo(object)
    关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面

    如:

    Wxml文件:
    <button bindtap="toOther" >跳到other</button>
    
    Js文件:
    toOther(){
        console.log("toOther");
        wx.redirectTo({
            url: "../../pages/other/other",// 注意这个相对路径:朝回返两级,也不能出现在tabBar里
            success: function () {
                console.log("到other了");
            },
            fail: function (e) {
                console.log("失败了,other");
                console.log(e);
            }
        });
    },
    

    2)、wx.switchTab(object)

    跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面

    注意:只能跳到出现在tabBar的页面里,其它页面不行。

    https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.switchTab.html

    如:
    App.json里的tabBar的配置:

    "tabBar": {
        "list": [
            {
                "pagePath": "pages/index/index",
                "text": "首页"
            },
            {
                "pagePath": "pages/goodslist/goodslist",
                "text": "商品列表"
            }
        ]
    }
    

    注意:没有other,有index

    goodslist.Wxml文件:

    <button bindtap="toIndex" >回到index</button>
    <button bindtap="toOther" >跳到other</button>
    

    goodslist.Js文件:

    toIndex: function () {
        wx.switchTab({
            url: '../../pages/index/index', //这个能够成功,因为,index在tabBar里的list属性里有。
        })
    },
    toOther() {
        console.log("toOther");
        wx.switchTab({
            url: "../../pages/other/other", //不能跳转,因为,other没有出现在tabBar的list属性里。
            success: function () {
                console.log("到other了");
            },
            fail: function (e) {
                console.log("失败了,other");
                console.log(e);
            }
        });
    },
    

    其它的我也不知道,还没看

    人机交互

    1)、wx.showToast({})

    显示消息提示框

    如:
    Wxml文件:

    <button bindtap="regCheck" >注册</button>
    

    Js文件:

    regCheck(){
        wx.showToast({
            title: "注册成功",
            icon: "success",
            duration: 500,
            mask: true
        })
    },
    

    2)、wx.showModal({})

    显示模态对话框

    如:
    Wxml文件:

    <button bindtap="deleteInfo" >删除</button>
    

    Js文件:

    deleteInfo(){
        wx.showModal({
            title: '微信小程序',
            content: '确认要删除吗',
            success: function (res) {
                if (res.confirm) {
                    console.log("你确认了");
                } else if (res.cancel) {
                    console.log("你取消了");
                }
            }
        })
    },
    

    3)、显示loading提示框

    wx.showLoading({})显示等待提示框,需主动调用wx.hideLoading 才能关闭

    wx.hideLoading({})隐藏 loading 提示框

    如:

    wxml代码:

    <button bindtap="getData" >获取数据</button>
    

    js代码:

      getData(){
        //显示loading
        wx.showLoading({
          title: 'loading……………………',
        })
        // 发送请求
        setTimeout(function(){
          // 响应回来,隐藏loading
          wx.hideLoading();
        },2000);
    
      },
    

    4)、显示操作菜单
    wx.showActionSheet({})显示操作菜单

    数据交互

    1、请求本地模拟数据

    小程序目前是一定要请求https的数据,如果想要请求本地数据需要对数据进行操作。

    1).Json数据:

    新建.js文件,写json数据

    var local_database = [

    {数据。。。。。}

    ]

    module.exports = { //数据暴露出去

    postList: local_database

    }

    2).使用json数据:

    在需要使用数据的页面js中引用

    var postsData=require(’…/…/data/posts-data.js’); //引入

    在生命周期的onLoad函数中使用this.setData({})进行数据赋值

    2、request数据请求

    发起 HTTPS 网络请求。request({参数:值})

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aayBaS1b-1617698618531)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps13.jpg)]

    1)、request数据请求真实接口数据

    每个微信小程序需要事先设置一个通讯域名,小程序只可以跟指定的域名与进行网络通信。

    否则会出现如下错误:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cdQhQN2B-1617698618532)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps14.jpg)]

    如何设置: 选中自己的登录头像 选择登录信息 进行合法域名设置

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fqj5R5c8-1617698618532)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps15.jpg)]

    注意:

    域名不能使用 IP 地址或 localhost;

    域名必须经过 ICP 备案;

    2)、request请求mock数据

    没有服务器怎么请求数据?那就跳过域名校验。

    ​ 在微信开发者工具中,可以临时开启 ****开发环境不校验请求域名****、TLS版本及HTTPS证书 选项,跳过服务器域名的校验。此时,在微信开发者工具中及手机开启调试模式时,不会进行服务器域名的校验。

    如下步骤:

    在微信开发工具中 点击设置-》项目设置 就可以正常使用接口

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AQcqOlRl-1617698618533)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps16.jpg)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-khtfsX02-1617698618533)(C:\Users\31759\AppData\Roaming\Typora\typora-user-images\1599041100880.png)]

    选中:“不校验合法域名、web-view………………”

    在代码中就可以使用json-server数据:

    onLoad: function () {
        wx.request({
            url: 'http://localhost:3000/goods',
            header: {
                'content-type': 'application/json' // 默认值
            },
            success(res) {
                console.log(res.data)
            }
        })
    }
    

    post请求,需要设置请求头

    header: {
    ‘content-type’: ‘application/x-www-form-urlencoded’
    }

    自定义组件

    https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/

    (1) 组件模板和样式

    (2) Component 构造器

    (3) 组件间通信与事件(4) 组件生命周期

    (5) behaviors

    (6) 组件间关系

    (7) 数据监听器

    (8) 纯数据字段

    1、定义

    不是创建page,而是创建component,一个小程序组件(wxml,wxss,js,json)

    //组件名.js
    Component({ //构造一个组件
       //组件的属性列表,相当于vue组件的props
      properties:{
        title:{ //属性名
          type:String,//类型
          value: '默认值'
        }
      }
      //组件数据,内部状态
      data:{ 
      	msg:'..'
        num1:1,
        num2:2,
        sum:3
      }
              
      methods:{ //组件方法
        show(){
      		console.log(this.data.msg/this.properties.title)
      		this.setData({msg:...}) / properties 不可修改
    	 }
      }
      //组件监听器
        observers: {
        'num1, num2': function(num1, num2) {
          // 在 num1 或者 num2 被设置时,执行这个函数
          this.setData({
            sum: num1 + num2
          })
        }
        
    })
    

    2、注册

    全局注册 app.json , 到处可用(page,component)

    "usingComponents":{
      "使用时的组件名":"components/comp1/comp1"
    }
    
    

    局部注册 pagename.json ,当前页面可以

    "usingComponents":{....}
    

    组件内注册组件, 当前组件可用

    "usingComponents":{....}
    "component": true, // 当前组件可以套用组件
    

    3、使用

    <comp1 title="{{值}}"></comp1>
    

    API

    小程序 的API基本上都是以wx.开头的。

    (1) 基础

    wx.getSystemInfoSync

    wx.getSystemInfo

    (2) 路由

    wx.switchTab

    wx.reLaunch

    wx.redirectTo

    wx.navigateTo

    wx.navigateBack

    (3) 界面交互:

    wx.showToast

    wx.showModal

    wx.showLoading

    wx.showActionSheet

    wx.hideToast

    wx.hideLoading

    (4) 导航栏:

    wx.setNavigationBarTitle

    (4) 网络

    wx.request

    (5) 数据缓存

    wx.setStorageSync

    wx.setStorage

    wx.removeStorageSync

    wx.removeStorage

    wx.getStorageSync

    wx.getStorageInfoSync

    wx.getStorageInfo

    wx.getStorage

    wx.clearStorageSync

    wx.clearStorage

    骨架屏

    https://developers.weixin.qq.com/miniprogram/dev/devtools/skeleton.html

    小程序的框架

    mpvue:美团点评团队出品的小程序开发框架:mpvue,是“基于Vue”的框架的。mpvue是从整个Vue的核心代码上经过二次开发而形成的一个框架,相当于是给Vue本身赋能,增加了开发微信小程序的能力。

    wepy:WePY是在代码开发风格上借鉴了Vue,本身和Vue没有什么关系。

    mpvue

    介绍及其特点

    1.mpvue的介绍:

    mp:mini program

    Vue:就是vue了

    Mpvue就是把用vue的技术体系开发小程序的框架。

    2.mpvue框架的优点:

    比起原生小程序的开发,或者说,在目前原生小程序开发的基础上,我们可以有更多地获取到这样一些能力:

    **· 彻底的组件化开发能力:**提高代码(原生小程序没有,这个很重要,小程序把那个啥和那个啥分开了)

    · 完整的 Vue.js 开发体验(学过vue后,开发小程序,so easy)

    · 方便的 Vuex 数据管理方案:方便构建复杂应用(这个很重要)

    · 快捷的 webpack 构建机制:自定义构建策略、开发阶段 hotReload(这是前端必备)

    · 支持使用 npm 外部依赖(这是前端必备)

    · 使用 Vue.js 命令行工具 vue-cli 快速初始化项目

    · H5 代码转换编译成小程序目标代码的能力

    它的目标是:在未来最理想的状态下,可以一套代码可以直接跑在多端:WEB、微信小程序、支付宝小程序、Native(借助weex)

    环境搭建和第一个程序:

    1、安装nodejs,vue-cli

    2、创建mpvue的项目:vue init mpvue/mpvue-quickstart 项目名称

    假如,项目名称为mpvueprj。则运行如下命令,

    vue init mpvue/mpvue-quickstart mpvueprj

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fkVuFU99-1617698618534)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps19.jpg)]

    都默认回车吧

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5E15YC3A-1617698618535)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps20.jpg)]

    项目建好了

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m8lssUag-1617698618535)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps21.jpg)]

    3、进入项目目录,安装依赖:npm i

    4、Npm run dev后,进入开发模式,就会自动产生目录dist。Dist目录是编译产生的小程序的代码。以后,写vue代码就行,小程序的代码就会自动产生。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FBoYxyso-1617698618537)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps22.jpg)]

    5、运行小程序。

    需要打开微信开发者工具,来运行。

    (1) 在微信开发者工具里,导入项目:

    (2) 项目目录指向 mpvueprj

    (3) 填入appId

    (4) 点击“导入”按钮

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hHYozjk6-1617698618538)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps23.jpg)]

    (5) 如下效果:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z6VIHDVx-1617698618539)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps24.jpg)]

    (6) 尝试修改vue组件,自动编译,小程序结果立即呈现

    • Vue组件(index/index.vue)增加“hello”文字

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SgKX335Z-1617698618540)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps27.jpg)]

    自动编译后,在微信开发者工具里小程序的结果立即呈现

    ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gjgddMrZ-1617698618540)(file:///C:\Users\31759\AppData\Local\Temp\ksohtml25640\wps29.jpg)]

    wepy

    WePY介绍

    ​ WePY 是 腾讯 参考了Vue 等框架对原生小程序进行再次封装的框架,更贴近于 MVVM 架构模式, 并支持ES6/7的一些新特性。
    注意:WePY 2 是基于小程序原生组件实现组件化开发。因此 WePY 2 支持的最低版本小程序基础库为 1.6.3。
    官网:https://wepyjs.github.io/wepy-docs/2.x/#/

    WePY 版本

    ​ WePY 2 并不是基于 WePY 1 的升级版,而是完全重新开发的全新版本

    WePY 安装和创建项目

    WePY的安装或更新都通过npm进行。

    • ​ 全局安装 WePY CLI 工具

      ​ npm install @wepy/cli -g

    • ​ 使用 standard 模板初始化项目:

      ​ wepy init standard 项目名

    • cd myproj

    • npm install

    • npm run dev 监听并且编译项目
      微信开发者工具导入项目(项目根目录),就可以预览效果了

    四、报错
    1、报错

    怎么办? 问题出在compiler-less的版本问题
    需要把
    compile-less 锁定到2.0.3,再把@wepy/cli更新到@wepy/cli@2.0.0-alpha.18

    2、解决:
    问题出在compiler-less的版本问题
    需要把compile-less 锁定到2.0.3,
    再把@wepy/cli更新到 @wepy/cli@2.0.0-alpha.18
    在package.json中修改
    618538)]

    (5) 如下效果:

    [外链图片转存中…(img-Z6VIHDVx-1617698618539)]

    (6) 尝试修改vue组件,自动编译,小程序结果立即呈现

    • Vue组件(index/index.vue)增加“hello”文字

    [外链图片转存中…(img-SgKX335Z-1617698618540)]

    自动编译后,在微信开发者工具里小程序的结果立即呈现

    ![外链图片转存中…(img-gjgddMrZ-1617698618540)]

    wepy

    WePY介绍

    ​ WePY 是 腾讯 参考了Vue 等框架对原生小程序进行再次封装的框架,更贴近于 MVVM 架构模式, 并支持ES6/7的一些新特性。
    注意:WePY 2 是基于小程序原生组件实现组件化开发。因此 WePY 2 支持的最低版本小程序基础库为 1.6.3。
    官网:https://wepyjs.github.io/wepy-docs/2.x/#/

    WePY 版本

    ​ WePY 2 并不是基于 WePY 1 的升级版,而是完全重新开发的全新版本

    WePY 安装和创建项目

    WePY的安装或更新都通过npm进行。

    • ​ 全局安装 WePY CLI 工具

      ​ npm install @wepy/cli -g

    • ​ 使用 standard 模板初始化项目:

      ​ wepy init standard 项目名

    • cd myproj

    • npm install

    • npm run dev 监听并且编译项目
      微信开发者工具导入项目(项目根目录),就可以预览效果了

    四、报错
    1、报错

    怎么办? 问题出在compiler-less的版本问题
    需要把
    compile-less 锁定到2.0.3,再把@wepy/cli更新到@wepy/cli@2.0.0-alpha.18

    2、解决:
    问题出在compiler-less的版本问题
    需要把compile-less 锁定到2.0.3,
    再把@wepy/cli更新到 @wepy/cli@2.0.0-alpha.18
    在package.json中修改
    重新cnpm install

    展开全文
  • 全栈项目|小书架|微信小程序-登录及token鉴权 小程序登录 之前也写过微信小程序登录的相关文章: 微信小程序~新版授权用户登录例子 微信小程序-携带Token无感知登录的网络请求方案 微信小程序开通云开发并利用云函数...
  • 在PC端时代,百度的地位几乎无人能敌,就算如强大的谷歌,在中国市场也败在百度的脚下,百度曾经做了一个“类似淘宝网站”的有呀,当时给阿里巴巴吓的赶紧关闭搜索引擎,退避三舍,可是,到了移动端的百度,却大大的...
  • 对微信小程序的理解

    2020-11-22 14:22:06
    微信小程序 定义:微信小程序,是小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。 微信小程序有四大特性: ...
  • 微信小程序

    2021-04-06 19:05:51
    微信小程序 准备工作 注册小程序帐号 ① 准备一个微信号(你如果还没有微信号,你out了,你是穿越来的吧) ② 申请小程序账号:https://mp.weixin.qq.com/wxopen/waregister?action=step1 获取开发密钥(appId) 在...
  • 微信小程序-入门笔记

    2019-07-09 14:25:29
    app.js: 小程序逻辑(打开小程序,第一个执行的就是这个,即入口) app.json:小程序的公共配置(全局的) app.wxss:小程序公共样式表(全局的) sitemap.json:配置文件 每个小程序页面,都是由.js、.json、.wxml...
  • 为了直接扫描一个二维码就进入小程序并完成部分业务操作, 需要用到微信小程序提供的二维码接口 wxacode.getUnlimited 微信文档连接...
  • 微信小程序总结

    2021-04-06 16:11:23
    微信小程序 准备工作 注册小程序帐号 ① 准备一个微信号(你如果还没有微信号,你out了,你是穿越来的吧) ② 申请小程序账号:https://mp.weixin.qq.com/wxopen/waregister?action=step1 获取开发密钥(appId) 在...
  • 引用小程序web-view组件返回出现问题。 问题表现 采用小程序web-view组件跳转到外部网站时,需要点击两次返回才能返回到小程序。 解决方法 方法一:在目标网站内引入script标签。 代码如下: <script type...
  • 前言3 个月前,微信小程序推出了 web-view 组件引发了一波小高潮,笔者所在的大前端团队写过一篇浅析,详情可见:浅谈微信小程序前端生态。我们曾大胆猜想,这一功能,可能直接导致小程序数量增长迎来一波高峰。毕竟...
  • 微信小程序scroll-view横向滚动 微信小程序(页面跳转详解) 微信小程序bind事件和catch事件区别 微信小程序:button组件的边框设置 分享几个微信小程序开发框架和工具 微信小程序scroll-view横向滚动 原文:...
  • 近年来随着互联网的发展,小程序、APP、H5……互联网载体形式越来越多,对于 APP、小程序、H5等应用的特点,很多人恐怕也比较迷惑,本文将整体概述APP、小程序、H5的含义,再从可用性、优缺点、用户体验、成本等方面...
  • 小程序实战总结

    2018-09-07 09:43:42
    本文从小程序框架、 api 、组件、应用四个方面入手,说明在开发过程中遇到的问题,并给出处理方案。...本文从具体的业务场景出发,汇总笔者在原生小程序日常开发中遇到的常见问题,并给出相应的解决方案,希...
  • 小程序公开课 - day1 1. 技术の准备 HTML + CSS 能够像素级还原UI设计稿 掌握 CSS3 中的 Flex 布局 Javascript 基础 数据类型、变量 循环、分支、判断 函数、对象、数组 面向对象*、ES6* 了解至少...
  • 我们来介绍一款由美团点评研发,使用 Vue.js 来开发微信小程序的前端框架 ——mpVue。使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为 H5 和小程序提供了代码复用的能力。用 Vue.js 开发小程序的前端框架 ...
  • 很多朋友小程序上线后,客服消息这块一直没得到解决。小程序客服消息只能在PC端回复,是让众多小程序运营商及商家头疼的问题,因为一个再牛逼的客服,也不可能随时随地都抱着电脑,这就导致很多用户的留言不能及时...
  • 终于见到龙哥了,虽然声音听起来让我的老年尴尬症犯了,但在宣布微信小程序开启的时候还是让我非常激动!1月19日微信小程序就要开始了!现场郭叔也上传几张照片,嗯,中午的午餐还是不错的! ...
  • 然而很多用户反馈,没办法彻底关闭一些系统进程,这个问题简单,下面编就给大家分享Win10彻底关闭系统进程的操作方法。 步骤如下: 1、在任务管理器中,转到“详细信息”一栏,查看下你想关闭程序...
  • 无论Windows 10打过多少补丁,官方说的有多么完美,运行卡顿和程序假死还是常有的事儿。这个时候常规的解决方案就是用任务管理器(Ctrl+Alt+Del)去解决一些占用系统资源非常过分,“表脸”的进程。 但有的...
  • 小程序重要资源大全

    2017-06-19 14:18:00
    1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=14764346784612:简易教程:https://mp.weixin.qq.com/debug/wxadoc/dev/?t=14764346775993:设计指南:...
  • 今年,我的同事问我说要不要今年继续来参加公开课,给大家做一些对于去年说的小程序的一些新的进展介绍,我其实也想了很久,最后我觉得作为对去年的一个回应,我内心里是非常的激动,可能很多朋友知道微信的历史,
  • 上班时候,老被腾讯弹出来的新闻打扰,很少烦恼,于是编写了一小程序,用于彻底解决这个问题,并代码开源,以防杀毒软件告诉你是病毒
  • 今天开始手把手的带大家实现一款答题类的小程序 一,效果预览 二,配套资料 1,讲解视频 视频课我会在B站免费提供给大家,欢迎关注,欢迎三连。 https://space.bilibili.com/419474640/video 2,配套笔记 配套笔记...
  • 之前Ant_li发帖曾讲过DELL笔记本触摸板与QQ冲突的问题(http://hi.baidu.com/you555/blog/item/53fc3ace4fcff437b600c825.html),今天又有朋友电话询问,便把彻底解决QQ与触摸板的办法贴上。这也是年前偶然发现的。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,377
精华内容 3,350
关键字:

彻底关闭qq小程序