微信小程序基础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

-->

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容