美文网首页
小程序代码组成

小程序代码组成

作者: 开朗的饭团 | 来源:发表于2020-05-16 14:25 被阅读0次

    小程序由配置代码JSON文件、模板代码WXML文件、样式代码WXSS文件以及逻辑代码JavaScript文件组成。

    1.JSON配置

    JSON是一种数据格式,不是变成语言,在小程序中,JSON功能为:静态配置。

    例子:

    {
      "pages":[
        "pages/index/index",
        "pages/logs/logs"
      ],
      "window":{
        "backgroundTextStyle":"light",
        "navigationBarBackgroundColor": "#fff",
        "navigationBarTitleText": "WeChat",
        "navigationBarTextStyle":"black"
      }
    }
    

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

    JSON语法

    image.png

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


    image.png

    JSON文件中无法使用注释

    2.1WXML模板

    WXML 全称是 WeiXin Markup Language,是小程序框架设计的一套标签语言,结合小程序的基础组件、事件系统,可以构建出页面的结构。

    <!--一个简单的文本标签 -->
    <text>hello world</text>
    
    <!-- view 中包含了 text 标签 -->
    <view>
      <text>hello world</text>
    </view>
    
    <image class="userinfo-avatar" src="./image/a.png" ></image>
    

    2.2 数据绑定

    在小程序中,使用WXML语言所提供的数据绑定功能,来完成界面的实时更新
    动态数据绑定

    <!--pages/wxml/index.wxml-->
    <text>当前时间:{{time}}</text>
    
    // pages/wxml/index.js
    Page({
      /**
       * 页面的初始数据
       */
      data: {
        time: (new Date()).toString()
      },
    })
    

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

    属性值动态绑定方法:

    <!-- 正确的写法 -->
    <text data-test="{{test}}"> hello world</text>
    
    
    <!-- 错误的写法  -->
    <text data-test={{test}}> hello world </text >
    

    输出

    <!--
    {
      var2: undefined,
      var3: null,
      var4: "var4"
    }
    -->
    
    
    <view>{{var1}}</view>
    <view>{{var2}}</view>
    <view>{{var3}}</view>
    <view>{{var4}}</view>
    
    
    <!--
    输出:
    null
    var4
    -->
    

    2.3逻辑语法

    可以在{{ }}内进行简单的逻辑运算:

    • 三元运算
    <!-- 根据 a 的值是否等于 10 在页面输出不同的内容 -->
    <text>{{ a === 10? "变量 a 等于10": "变量 a 不等于10"}}</text>
    
    • 算数运算:
    <!--
    { a: 1,  b: 2, c: 3 }
    -->
    
    
    <view> {{a + b}} + {{c}} + d </view>
    
    
    <!-- 输出 3 + 3 + d -->
    
    • 字符串的拼接
    <!--
    { name: 'world' }
    -->
    
    
    <view>{{"hello " + name}}</view>
    
    
    <!-- 输出 hello world -->
    
    • {{}}中还可以直接放置数字、字符串或者是数组
    <text>{{[1,2,3]}}</text>
    
    <!-- 输出 1,2,3 -->
    
    
    
    <text>{{"hello world"}}</text>
    
    <!-- 输出 hello world -->
    

    2.4条件逻辑

    WXML中,使用wx:if="{{condition}}"来判断是否需要渲染该代码块:

    <view wx:if="{{condition}}"> True </view>
    

    使用wx:elif和wx:else来添加一个else快:

    <view wx:if="{{length > 5}}"> 1 </view>
    <view wx:elif="{{length > 2}}"> 2 </view>
    <view wx:else> 3 </view>
    

    如果要一次性判断多个组件标签,可以使用一个<block />标签将多个组件包装起来,并在上边使用wx:if控制属性。

    <block wx:if="{{true}}">
      <view> view1 </view>
      <view> view2 </view>
    </block>
    

    2.5列表渲染

    • wx:for
      在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item
    <!-- array 是一个数组 -->
    <view wx:for="{{array}}">
      {{index}}: {{item.message}}
    </view>
    
    <!-- 对应的脚本文件
    Page({
      data: {
        array: [{
          message: 'foo',
        }, {
          message: 'bar'
        }]
      }
    })
    -->
    

    使用 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>
    
    • wx:key
      如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 <input/> 中的输入内容, <switch/> 的选中状态),需要使用 wx:key 来指定列表中项目的唯一的标识符。
      wx:key的值以两种形式提供:
    1. 字符串,代表在 for 循环的 array 中 item 的某个 property,该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。
    2. 保留关键字 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
        })
      }
    })
    

    2.6模板

    使用 name 属性,作为模板的名字

    <template name="msgItem">
      <view>
        <text> {{index}}: {{msg}} </text>
        <text> Time: {{time}} </text>
      </view>
    </template>
    
    • 使用is属性,声明需要使用的模板,然后将模板所需要的 data 传入
    <!--
    item: {
      index: 0,
      msg: 'this is a template',
      time: '2016-06-18'
    }
    -->
    
    <template is="msgItem" data="{{...item}}"/>
    
    

    动态is

    <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
    -->
    

    2.7引用

    1. import
      import可以在该文件中使用目标文件定义的template
    <import src="item.wxml"/>
    
    <template is="item" data="{{text: 'forbar'}}"/>
    

    import不具有递归的特性

    1. include
      可以将目标文件中除了<template/><wxs/>外的整个代码引入,相当于是拷贝到include位置
    <!-- index.wxml -->
    <include src="header.wxml"/>
    
    <view> body </view>
    
    <include src="footer.wxml"/>
    
    <!-- header.wxml -->
    <view> header </view>
    
    <!-- footer.wxml -->
    <view> footer </view>
    

    2.8共同属性

    所有wxml标签都支持的属性称之为共同属性


    image.png

    以上内容均参考《小程序开发指南》官网

    相关文章

      网友评论

          本文标题:小程序代码组成

          本文链接:https://www.haomeiwen.com/subject/gailohtx.html