【小程序】数据绑定

【原文:数据绑定】

微信小程序是通过状态模式-单向数据流的方式来实现数据绑定的。

对象状态化,只要对象状态发送变化,就通知页面更新视图元素。 通过以下三个步骤实现:

  • 识别哪个UI元素被绑定了相应的对象。
  • 监视对象状态的变化。
  • 将所有变化传播到绑定的视图上。
<view>{{ message }}</view>
Page({
  data: {
    message: 'Hello MINA!'
  }
})

数据流向是单向的,视图变化不会影响对象状态。

更多数据绑定方式

<!-- index.wxml -->
 <!--数据绑定--内容-->
<view>{{message}}</view>

<!--数据绑定--组件属性-->
<view >组件属性id-{{id}}</view>

<!--数据绑定---控制属性-->
<view wx:if="{{condition}}">控制属性{{condition}}</view>

<!--数据绑定---三元运算-->
<view hidden="{{flag ? true : false}}">Hidden--{{flag}}</view>

<!-- wx:if 有更高的切换消耗而 hidden 有更高的初始渲染消耗。因此,如果需要频繁切换的情景下,用 hidden 更好,如果在运行时条件不大可能改变则 wx:if 较好。 -->

<!--数据绑定---算数运算-->
<view>{{a + b}} + {{c}} + d</view>

<!--数据绑定---逻辑判断-->
<view wx:if="{{length > 5}}">6</view>

<!--数据绑定---字符串运算-->
<view>{{"Hello  " + name}}</view>

<!--数据绑定---数组组合-->
<!-- 默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item -->
<!-- 使用 wx:for-item 可以指定数组当前元素的变量名,使用 wx:for-index 可以指定数组当前下标的变量名: -->
<view wx:for="{{[zero, 1, 2, 3, 4, 5, 6]}}">{{item}}</view>

<!--数据绑定---对象-->
<!--最终组合成的对象是{for: 1, bar: 2}-->
<template is="objectCombine" data="{{for: x, bar: y}}"></template>

<!--数据绑定---扩展运算符 ... 来将一个对象展开-->
<!--最终组合成的对象是{a: 1, b: 2, c: 3, d: 4, e: 5}-->
<template is="objectCombine" data="{{...obj1, ...obj2, e: 5}}"></template>

<!--数据绑定---对象的 key 和 value 相同-->
<!--最终组合成的对象是{foo: 'my-foo', bar:'my-bar'}-->
<template is="objectCombine" data="{{foo, bar}}"></template>
index.js
Page({
  data:{
    //内容
    message:'Hello MINA!',

    //组件属性
    id: 0,

    //控制属性
    condition: true,

    //三元运算
    flag:false,

    //算数运算
    a: 1,
    b: 2,
    c: 3,

    //逻辑判断
    length: 6,

    //字符串运算
    name: 'MINA',

    //数组组合
    zero: 0,

    //对象
    x: 0,
    y: 1,

    //对象展开
    obj1: {
        a: 1,
        b: 2
    },
    obj2: {
        c: 3,
        d: 4
    },
    e: 5,

    //对象key和value相同
    foo: 'my-foo',
    bar: 'my-bar'
  },
})

----------------------------------------

小程序系列:

前言

项目结构

生命周期

请求与封装

数据绑定

事件

基础使用: 缓存

前端架构浅谈

----------------------------------------