初试小程序

开发前的装备

  1. 注册账号
  2. 下载开发者工具
  3. 注册登录微信公众平台并记下appID(在开发设置里)

快速开始

  1. 打开登陆开发者工具,创建小程序项目
  2. 默认打开后,会发现已经自动给我们写入了一些代码



    页面是空白的,但是打开调试器发现有很多报错



    点击右上角的详情,修改下配置,把调试基础库改成1.9.1,然后把不校验安全域名、web-view 域名、TLS 版本以及 HTTPS 证书勾选上,不然我们的请求就必须得是https的了

    此时控制台没有报错了,页面展示如下,点击按钮,我们可以看到微信授权,点击允许,我们的头像和昵称就显示在页面上了



项目结构

我们主要看app.js、app.json、app.wxss三个文件和pages文件夹里面的wxml

  1. app.js 作为小程序的入口,里面有个app实例,每一个小程序都会有一个app实例,小程序启动后触发onLaunch函数,获取用户信息
  2. app.json 是小程序的全局配置,page字段放所有页面的路径,window字段定义所有页面顶部的背景色,字体颜色
  3. app.wxss 是小程序的公用样式(小程序的选择器与CSS有一定出入,仅支持部分css选择器)
  4. wxml 就是我们的HTML文件,常用标签为 viewtext 等,没有所谓的divspanp一类的标签了,我们习惯称它们为组件

设计理念

小程序内部可以理解成一个mvvm的框架,分为逻辑层和视图层,逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈

// pages/test/index.js
Page({
  data:{  // 页面的初始数据
      text: 'hello world'
  },
  onLoad(){
    console.log('hello')
  },
  change(){
    this.setData({
    text:'hello'
  })
  }
})

使用page函数注册一个页面,接收一个Object参数,使用了onLoad函数来监听页面的加载并定义了change函数使用setData函数更改了text的值

更改data数据的时候必须调用setData函数进行更改
// pages/test/index.wxml
<view>{{text}}</view> //  显示hello world
<button bindtap="change">点击更改上面文字</button> //  显示hello 

button上绑定了点击事件,触发change函数

事件传递参数

我们触发事件的时候,可能需要传递一些参数,但是在小程序里无法像JS那样直接传递,我们需要将参数绑定到事件元素上

// index.wxml
<button data-test="哈哈"  bindtap="change">点击我</button>

使用e.currentTarget.dataset来获取值

// index.js
change(e){
  e.currentTarget.dataset.test  // 哈哈
}

setData函数拓展

  1. 修改嵌套多层的数据, 如果是写死的参数可以使用引号将参数包起来
this.setData({
    'text.msg': 'hello'
})
  1. 如果是传递进来的值呢?很简单将data的key用[]括起来
// index.wxml
<button bindtap="change" data-key="text.msg">点击我</button>
// index.js
change(e){
var key = e.currentTarget.dataset.key
  this.setData({
    key: 'hello'     // 数据不会更改
    [key]: 'hello' //  数据会更改
  })
}

路由

小程序里面所有的页面路由由框架进行管理
我们可以使用getCurrnetPages函数获取当前页面栈的实例,返回一个数组, 最后一个元素为当前页面
小程序定义了五个用于导航跳转的API,这里列举两个常用的

  1. wx.navigateTo 保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面
wx.navigateTo({url:`/pages/text/index?text=${121212}`})
  1. wx.redirectTo 关闭当前页面,跳转到应用内的某个页面
wx.navigateTo({url:`/pages/text/index?text=${121212}`})

通过上面的API跳转带的参数,在页面上我们需要怎么获取呢?

// text.js
Page({
  data:{
     ... // 页面数据
  },
  onLoad(options){
    console.log(options.text)  // 121212 获取上个页面带过来的值
  }
})
数据过滤 过滤器

如果你使用过vue、angular框架,对|管道符肯定不陌生,它用来对我们的数据进行转换,那小程序里面有没有过滤器呢,不过这个是真没有。
但是目前有两种方法,可以实现过滤。

  1. 获取数据的时候,直接改了,干脆利落、好不优雅。
  2. 使用最后我们要介绍的wxs
WXS

WXS是小程序的一套脚本语言,首先和js是不同的语言,其次运行环境和js也是隔离开的,wxs不能调用js文件中的函数,也不能调用小程序的API,它主要用来增强wxml。
wxs不能使用es6语法,人家不是js啦😷
接下来我们来实现一个使用wxs实现一个简单的过滤器
1、首先我们创建filter.wxs文件并写入以下内容

// filter.wxs
var Filter = {
  getSatusStr: function(num){
    var str = '';
    switch (num) {
      case 0:
        string = '我是0的状态'
        break;
      case 1:
        string = '我是1的状态'
        break;
      default:
        string = '我是默认的状态'
        break;
    }
    return str
  }
}
module.exports = {
  status: Filter.getSatusStr
}

同级下index.wxml使用

<wxs module="filter" src="./filter.wxs"></wxs> 
<view wx:for="{{list}}">
  <view>{{filter.status(item.status)}}</view>  
</view>
  1. 每个wxs标签都有一个module 属性 ,wxs可以写在wxml里面的wxs标签里和.wxs文件里
  2. wxs文件中引入其他wxs文件时候,可以使用require函数,接受相对路径
  3. 在wxml标签里使用外部wxs文件的时候,src属性是相对路径

总结

  1. 使用sass写wxss文件,在目录下创建index.scss文件,当前目录下执行 sass --watch index.scss:index.wxss --style expanded
  2. wcss 文件里面不能使用本地图片,请使用base64、网上图片或者image
  3. 修改页面的背景,类似与css中设置body,可以直接设置page
  4. 不要直接操作this.data,使用this.setData函数,切记、切记
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容

  • 因新工作主要负责微信小程序这一块,最近的重心就移到这一块,该博客是对微信小程序整体的整理归纳以及标明一些细节点,初...
    majun00阅读 7,295评论 0 9
  • 1、环境搭建 直接进入微信平台下载即可 2、基本开发思路 小程序每个界面一般来说对应有三个文件 xxx.js 用于...
    limbo_lyn阅读 175评论 0 0
  • 小程序 基本知识 项目文件 JSON 配置 小程序配置 app.json app.json 是对当前小程序的全局配...
    勇敢的_心_阅读 1,327评论 0 6
  • 微信小程序官方文档 一、准备工作 申请账号 安装开发工具(微信自己的开发工具) 微信自己弄了一套语言,目录结构如下...
    Viaphlyn阅读 397评论 0 0
  • 1.锚点 这个概念一开始不太容易理解。那么如何理解锚点呢?这样假如我们现在正在创作一本电子版小说,我发现每次继续写...
    NewSongs阅读 678评论 0 50