小程序基本语法

项目demo: https://github.com/Aluka-w/oldIsland-wx

逻辑层 (js)

生命周期

app.js

  1. onLounch(只调用一次) -> onShow -> 依次注册好各个页面组件

page.js

  1. onLoad(首页加载) -> onShow -> onReady

setData更改data值

  1. 用例:
  //异步操作
  this.setData({
    // 数组或者对象的属性, 必须字符串才生效, 要不然直接报错
    'object.text': '新值',
    'array[0].text': '新值'
  }, () => [
    // 更新完数据的回调
  ])

导航

  1. navigateTo 只能导航到本页面的子组件内

  2. 例子的完整路径: pages/home/tip/tip

  3. 声明式: <navigator open-type="navigateTo" url='tip/tip'> 跳转页面 </navigator>

  4. 编程式: wx.navigateTo({ url: 'tip/tip'})

  5. 类似的有:

  6. 页面重定向: wx.redirectTo<navigator open-type="redirectTo"/> 页面会销毁

  7. 页面返回: wx.navigateBack<navigator open-type="navigateBack"> 页面会销毁

  8. tab栏切换 wx.switchTab<navigator open-type="switchTab"/>

  9. 重启本页面 wx.reLaunch<navigator open-type="reLaunch"/> 页面会销毁

  10. Tip

  11. navigateTo, redirectTo 只能打开非 tabBar 页面

  12. switchTab 只能打开 tabBar 页面

  13. reLaunch 可以打开任意页面

模块化

  1. getApp() 获取全局的数据, 全局的数据可以在APP()中设置

  2. commonjs规范

  3. 导出: module.exports.sayHi = sayHi / exports.sayHi = sayHi

  4. 导入: var sayHi = require('sayHi')

API

  1. 事件监听 API: wx.onSocketOpen(Fn) 回调函数, 返回值为回调函数的参数
  wx.onSocketOpen(function (res) {
    console.log(res.direction)
  })
  1. 同步 API: wx.setStorageSync 返回值是return出来, 有错会抛出

  2. 异步 API: wx.login 接受参数

  wx.login({
  success(res) {
    console.log(res.code)
  },
  fail() {

  }
})

视图层

WXML

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

数据绑定: <view> {{message}} </view>

  1. Mustache 语法

  2. 组件属性(需要在双引号之内), boolean 也需要"{{true}}"

  3. 花括号和引号之间如果有空格,将最终被解析成为字符串

  4. 拓展运算符

  <template is="objectCombine" data="{{...obj1, ...obj2, e: 5}}"></template>
  Page({
    data: {
      obj1: { a: 1, b: 2 },
      obj2: { c: 3, d: 4 }
    }
  })
  // 最后是 {a: 1, b: 2, c: 3, d: 4, e: 5}

列表渲染: <view wx:for="{{array}}" wx:for-index="idx" wx:key="idx"> {{item}} </view>

  1. 默认直接用index 和 item

  2. 别名: wx:for-index='idx' 就是把index改成了idx

  3. wx:for="array" 遍历一个字符串, 解析出来 a, r, r, a, y

  4. 花括号和引号之间如果有空格,将最终被解析成为字符串 wx:for="{{array}} " => wx:for="{{array + ''}}"

  5. key值的*this代表item本身当key值

条件渲染: <view wx:if="{{view == 'WEBVIEW'}}"> WEBVIEW </view>

  1. wx:if 和 wx:hidden 就相当于 v-if 和 v-show

模板

  1. 模板定义代码片段, 然后需要的地方引用, name属性代表模板

  2. 声明: <template name="msgItem"><view>{{item}}</view></view></template>

  3. 引用: 使用is关键字data为数据: <template is="msgItem" data="{{...item}}"/>

事件: <view bindtap="add"> {{count}} </view>

  1. bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡(catch事件单单只触发本身)

  2. 捕获

  3. 事件对象:

    dataset: 里面可以以data-开头,多个单词由连字符-链接,不能有大写, 传递数据

引用

  1. WXML 提供两种文件引用方式import和include

  2. import

  3. <import src="a.wxml"/>

  4. import的作用域: 只会 import 目标文件中定义的 template,而不会 import 目标文件 import 的 template

  5. include

  6. include 可以将目标文件除了 <template/> <wxs/> 外的整个代码引入,相当于是拷贝到 include 位置

WXSS

  1. rpx(responsive pixel): 可以根据屏幕宽度进行自适应, 如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素
iphone6 上才是二倍的换算
  1. 样式导入: @import语句可以导入外联样式表,@import后跟需要导入的外联样式表的相对路径

  2. 适配思路: rpx和px的抉择: font-size(px)

  3. 全局样式: 在app.wxss中定义, 组件有部分样式是不能继承全局样式: 比如font, color可以被继承, 其他不能9

`page{font-size: 24rpx}`, 因为小程序自动在每一页加page为最外层标签

WXS

  1. 例子
  <wxs module="m1">
    var msg = "hello world";

    module.exports.message = msg;
  </wxs>

  <view> {{m1.message}} </view>
  1. 概念: 编写在 wxml 文件中的 <wxs> 标签内,或以 .wxs 为后缀名的文件内

  2. wxml中引用: 引用.wxs的文件的相对路径 <wxs src="./../tools.wxs" module="tools" />, 使用 <view>{{tools.msg}}</view>

  3. wxs中引用: 使用 require 函数

组件

内置组件

自定义组件

声明自定义组件

  1. 自定义组件放在components文件夹下 -> 创建的时候是创建的components而不是page -> 区别就是app.json中是找不到路径的 -> 否则引用组件时候是找不到的

  2. wxss:

  3. 在组件wxss中不应使用ID选择器、属性选择器和标签名选择器

  4. js:

  5. Component构造器: 相当于页面的Page({})

  6. properties => 相当于Vue的props

  7. wxml:

  8. json:

  9. "component": true // 表示是组件

使用自定义组件的组件

  1. 在json文件中声明
  {
"usingComponents": {
    "你自定义的组件名": "组件的位置, 可以绝对路径也可以相对路径",
    "component-tag-name": "path/to/the/custom/component"
  }
}
  1. 使用: 直接使用json中命名的名称

组件传值

总结: 项目并未完全完成, 留待之后补充~

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

推荐阅读更多精彩内容