微信小程序基础1

JSON语法

JSON文件在小程序代码中扮演静态配置的作用,在小程序运行之前就决定了小程序一些表现,需要注意的是小程序是无法在运行过程中去动态更新JSON 配置文件从而发生对应的变化的。

JSON文件都是被包裹在一个大括号中 {},通过key-value的方式来表达数据。

JSON的Key必须包裹在一个双引号中,在实践中,编写 JSON 的时候,忘了给 Key 值加双引号或者是把双引号写成单引号是常见错误。

JSON的值只能是以下几种数据格式:

数字,包含浮点数和整数

字符串,需要包裹在双引号中

Bool值,true 或者 false

数组,需要包裹在方括号中 []

对象,需要包裹在大括号中 {}

Null

其他任何格式都会触发报错,例如 JavaScript 中的 undefined 。

JSON 文件中无法使用注释,试图添加注释将会引发报错。

WXML模板

标签可以拥有属性,属性提供了有关的 WXML元素更多信息。属性总是定义在开始标签中,除了一些特殊的属性外,其余属性的格式都是key="value" 的方式成对出现。需要注意的是,WXML中的属性是大小写敏感的,也就是说 class 和 Class 在WXML中是不同的属性

WXML 通过 {{变量名}} 来绑定 WXML 文件和对应的 JavaScript 文件中的 data 对象属性。

属性值也可以动态的去改变,有所不同的是,属性值必须被包裹在双引号中

需要注意的是变量名是大小写敏感的,也就是说 {{name}} 和 {{Name}} 是两个不同的变量

还需要注意,没有被定义的变量的或者是被设置为 undefined 的变量不会被同步到 wxml

逻辑语法

通过 {{ 变量名 }} 语法可以使得 WXML 拥有动态渲染的能力,除此外还可以在 {{ }} 内进行简单的逻辑运算。

三元运算 算数运算 还支持字符串的拼接

{{ }}中还可以直接放置数字、字符串或者是数组

条件逻辑

因为 wx:if 是一个控制属性,需要将它添加到一个标签上。如果要一次性判断多个组件标签,可以使用一个

<block/>标签将多个组件包装起来,并在上边使用 wx:if 控制属性。

列表渲染

在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item

使用 wx:for-item 指定数组当前元素的变量名,使用 wx:for-index 指定数组当前下标的变量名:

<view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName">

  {{idx}}: {{itemName.message}}

</view>

类似block wx:if,也可以将wx:for用在<block/>标签上,以渲染一个包含多节点的结构块。例如:

<block wx:for="{{[1, 2, 3]}}">

  <view> {{index}}: </view>

  <view> {{item}} </view>

</block>

如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如<input/>中的输入内容,<switch/>的选中状态),需要使用wx:key来指定列表中项目的唯一的标识符。

wx:key的值以两种形式提供:

字符串,代表在 for 循环的 array 中 item 的某个 property,该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。

保留关键字 this 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字,如:

当数据改变触发渲染层重新渲染的时候,会校正带有 key 的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身的状态,并且提高列表渲染时的效率。

代码清单2-14 使用 wx:key 示例(WXML)

<switch wx:for="{{objectArray}}" wx:key="unique" > {{item.id}} </switch>

<button bindtap="switch"> Switch </button>

<button bindtap="addToFront"> Add to the front </button>

<switch wx:for="{{numberArray}}" wx:key="*this" > {{item}} </switch>

<button bindtap="addNumberToFront"> Add Number to the front </button>

代码清单2-15 使用 wx:key 示例(JavaScript)

Page({

  data: {

    objectArray: [

      {id: 5, unique: 'unique_5'},

      {id: 4, unique: 'unique_4'},

      {id: 3, unique: 'unique_3'},

      {id: 2, unique: 'unique_2'},

      {id: 1, unique: 'unique_1'},

      {id: 0, unique: 'unique_0'},

    ],

    numberArray: [1, 2, 3, 4]

  },

  switch: function(e) {

    const length = this.data.objectArray.length

    for (let i = 0; i < length; ++i) {

      const x = Math.floor(Math.random() * length)

      const y = Math.floor(Math.random() * length)

      const temp = this.data.objectArray[x]

      this.data.objectArray[x] = this.data.objectArray[y]

      this.data.objectArray[y] = temp

    }

    this.setData({

      objectArray: this.data.objectArray

    })

  },

  addToFront: function(e) {

    const length = this.data.objectArray.length

      this.data.objectArray = [{id: length, unique: 'unique_' + length}].concat(this.data.objectArray)

    this.setData({

      objectArray: this.data.objectArray

    })

  },

  addNumberToFront: function(e){

    this.data.numberArray = [ this.data.numberArray.length + 1 ].concat(this.data.numberArray)

    this.setData({

      numberArray: this.data.numberArray

    })

  }

})

模板 template

WXML提供模板(template),可以在模板中定义代码片段,然后在不同的地方调用。使用 name 属性,作为模板的名字。然后在

<template/>内定义代码片段,如:代码清单2-16 定义模板

<template name="msgItem">

  <view>

    <text> {{index}}: {{msg}} </text>

    <text> Time: {{time}} </text>

  </view>

</template>

使用 is 属性,声明需要的使用的模板,然后将模板所需要的 data 传入,如代码2-17所示。

<!--

item: {

  index: 0,

  msg: 'this is a template',

  time: '2016-06-18'

}

-->

<template name="msgItem">

  <view>

    <text> {{index}}: {{msg}} </text>

    <text> Time: {{time}} </text>

  </view>

</template>

<template is="msgItem" data="{{...item}}"/>

<!-- 输出

0: this is a template Time: 2016-06-18

-->

is可以动态决定具体需要渲染哪个模板,如代码2-18所示。

<template name="odd">

  <view> odd </view>

</template>

<template name="even">

  <view> even </view>

</template>

<block wx:for="{{[1, 2, 3, 4, 5]}}">

  <template is="{{item % 2 == 0 ? 'even' : 'odd'}}"/>

</block>

<!-- 输出

odd

even

odd

even

odd

-->

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

推荐阅读更多精彩内容