小程序新手入门之基础知识

一、前置知识

1、注册帐号,获取appid。

2、微信开发者工具:调试小程序、公众号

3、与普通网页开发的区别:

(1)运行环境:网页开发渲染与脚本在同一个线程上,而小程序分为渲染层和逻辑层。逻辑层运行在jscore中,并没有DOM和BOM。jscore环境与node也不同,所以也无法使用一些npm包。

(2)兼容性:
ios,安卓,小程序开发者工具3种环境,逻辑层与渲染层各不相同。


运行环境

(3)整个小程序所有分包大小不超过 8M;单个分包不可超过2M

(4)开发流程:开发版本 ---> 体验版本 ---> 审核中版本 ---> 线上版本 ---> 发布
ps:若用户未主动删除小程序,发布后最差24小时下发新版本(解决办法:可通过启动时检查更新)

二、小程序结构及配置

1、项目结构

--images
--pages
  --index
      --index.js
      --index.json
      --index.wxml
      --index.wxss
  --logs
      --index.js
      --index.json
      --index.wxml
      --index.wxss
--app.js
--app.json
--app.wxss
--project.config.json

2、配置文件
(1)project.config.json
开发者工具自动生成的一个配置文件,和开发者工具中【详情】的配置一样,一般不做更改。官方文档

(2)app.json:全局配置文件。官方文档
举个栗子

{
  "pages": [
    "pages/index/index",
    "pages/logs/index"
  ],
  "window": {
     "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "XX小程序",
    "navigationBarTextStyle": "black"
  },
  "tabBar": {
    "color": "#a5a5a5",
    "selectedColor": "#f63232",
    "borderStyle": "black",
    "backgroundColor": "#fff",
    "list": [{
      "pagePath": "pages/index/index",
      "iconPath": "images/course.png",
      "selectedIconPath": "images/course_red.png",
      "text": "首页"
    }, {
      "pagePath": "pages/logs/logs",
      "iconPath": "images/study.png",
      "selectedIconPath": "images/study_red.png",
      "text": "日志"
    }]
  },
  "networkTimeout": {
    "request": 10000,
    "downloadFile": 10000
  },
  "debug": true,
  "navigateToMiniProgramAppIdList": [
    "wxe5f52902cf4de896"
  ],
  "sitemapLocation": "sitemap.json"
}

(3)页面配置:附上官方文档
每个页面都可以有.json文件,页面配置中只能设置 app.json 中 window 对应的配置项,以决定本页面的窗口表现,所以无需写 window 这个属性。页面的window属性会覆盖全局window属性。

{
    "usingComponents": {
        "ErrorPage": "./components/ErrorPage/index",
        "PPTLive": "./components/PPTLive/index",
        "Classroom": "./components/Classroom/index",
        "Loading": "./components/Loading/index"
    },
    "disableScroll": true,
    "pageOrientation": "landscape",
    "navigationStyle": "custom"
}

三、小程序开发

1、宿主环境


宿主环境
  • 通信:渲染层和逻辑层分别是2个线程管理。小程序的每个界面都是一个webview线程。渲染层和逻辑层通过微信客户端做中转。
  • 数据驱动:通过native

2、程序

// 程序构造函数。app实例是单例对象, js中可以通过getApp() 获取该对象
App({
  onLaunch: function(options) {}, // 小程序初始化完成时触发,only once
  onShow: function(options) {}, // 小程序启动,或从后台进入前台显示时触发
  onHide: function() {}, // 前台进入后台触发
  onError: function(msg) {}, // 脚本错误或api吊用失败时触发,带上错误信息
  globalData: 'I am global data'  // 全局data
}) 
  • 因为小程序有多种渠道打开,所以onLaunch和onShow可以带options参数,包含path,query,scene,shareTicket等。
  • globalData:切换webview时,还是公用一个jscore,因为App是单例,所以可以通过app实例获取全局数据。

3、页面

  • step1:创建js、json、wxml、wxss4个文件
  • step2:app.json中声明页面路径
  • step3:js文件中使用个页面构造器Page()
Page({
  data: { text: "This is page data." },
  onLoad: function(options) { }, // 页面首次加载,only once,早于onShow和onReady,options是
  onShow: function() { }, // 页面每次加载
  onReady: function() { }, // 页面初次渲染完成
  onHide: function() { }, // 页面隐藏
  onUnload: function() { },  // 页面卸载
  onPullDownRefresh: function() { },
  onReachBottom: function() { },
  onShareAppMessage: function () { },
  onPageScroll: function() { }
})

还可以添加任意的函数或数据,在Page实例的其他函数中用 this 可以访问

  • step4:wxml文件中写页面结构
    1)标签略有不同:view、text、image、button、block等等
    2)数据绑定: {{}}
    3)wx:if, wx:for

  • step5:wxss中写样式
    1)单位:rpx(responsive pixel);以iphone6换算,1px=2rpx

  • 进阶tips:wxs (官方文档)
    1)WeiXin Script运行环境与js隔离,ios中比js快2~20倍,android中差不多
    2)运行在视图层,适用于频繁交互场景:如滑动吸顶等

4、组件:小程序提供了很多组件,scroll-view,swiper,picker,live-player,web-view等等

  • 原生组件:层级第二高,其他组件的无法盖过原生组件。z-index无效。camera、canvas、input、live-player、live-pusher、map、textarea、video。
  • 层级第一高:cover-image、cover-view

5、自定义组件:

Component({
  behaviors: [], // 类似mixins
  properties: {  // 页面传值
    myProperty: { // 属性名
      type: String,
      value: ''
    },
    myProperty2: String // 简化的定义方式
  },

  data: {}, // 私有数据,可用于模板渲染

  lifetimes: {
    // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
    attached: function () { },  // 在组件实例进入页面节点树时执行
    moved: function () { },  // 在组件实例被移动到节点树另一个位置时执行    
    detached: function () { },   // 在组件实例被从页面节点树移除时执行
  },

  // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
  attached: function () { }, // 此处attached的声明会被lifetimes字段中的声明覆盖
  ready: function() { }, //在组件在视图层布局完成后执行   

  pageLifetimes: {
    // 组件所在页面的生命周期函数
    show: function () { },
    hide: function () { },
    resize: function () { },
  },

  methods: {
    onMyButtonTap: function(){
      this.setData({
        // 更新属性和数据的方法与更新页面数据的方法类似
      })
    },
    // 内部方法建议以下划线开头
    _myPrivateMethod: function(){
      // 这里将 data.A[0].B 设为 'myPrivateData'
      this.setData({
        'A[0].B': 'myPrivateData'
      })
    }
  }
})

6、api:宿主环境提供的一系列功能 附上官方文档

  • 基础: 系统、调试等方面的api
  • 路由:页面间的跳转
    1)wx.switchTab
    2)wx.reLaunch
    3)wx.redirectTo
    4)wx.navigateTo
    4)wx.navigateBack
  • 界面:通用的toast、loading、导航栏、动画等
  • 网络:wx.request等
  • 设备能力:蓝牙、扫码、屏幕

7、事件

  • 渲染层传递给逻辑层
  • 常用:点击、触摸、长按等
<!-- page.wxml -->
<view id="tapTest" data-hi="WeChat" bindtap="tapName"> Click me! </view>

// page.js
Page({
  tapName: function(event) {
    console.log(event)
  }
})

四、项目介绍(wepy框架)

  • 风格类似vue,上手快,开发简单方便
  • 支持第三方npm包
  • 优化:单文件、polyfill(es6)、样式编译器
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350