>위챗 애플릿 >미니 프로그램 개발 >{{뷰 레이어 보기}} WeChat 애플릿

{{뷰 레이어 보기}} WeChat 애플릿

高洛峰
高洛峰원래의
2017-02-21 15:52:062028검색

WeChat 애플릿 뷰 뷰 레이어 //자습

 1. 데이터 바인딩

数据绑定

WXML中的动态数据均来自对应Page的data。
简单绑定

数据绑定使用"Mustache"语法(双大括号)将变量包起来,可以作用于:
内容

<view> {{ message }} </view>

Page({
  data: {
    message: &#39;Hello MINA!&#39;
  }
})

组件属性(需要在双引号之内)

<view id="item-{{id}}"> </view>

Page({
  data: {
    id: 0
  }
})

控制属性(需要在双引号之内)

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

Page({
  data: {
    condition: true
  }
})

关键字(需要在双引号之内)

true:boolean 类型的 true,代表真值。

false: boolean 类型的 false,代表假值。

<checkbox checked="{{false}}"> </checkbox>

特别注意:不要直接写 checked="false",其计算结果是一个字符串,转成 boolean 类型后代表真值。

运算

可以在{{}}内进行简单的运算,支持的有如下几种方式:
三元运算

<view hidden="{{flag ? true : false}}"> Hidden </view>

算数运算

<view> {{a + b}} + {{c}} + d </view>

Page({
  data: {
    a: 1,
    b: 2,
    c: 3
  }
})

view中的内容为3 + 3 + d
逻辑判断

<view wx:if="{{length > 5}}"> </view>

字符串运算

<view>{{"hello" + name}}</view>

Page({
  data:{
    name:"MINA"
  }
})

数据路径运算

<view>{{object.key}} {{array[0]}}</view>

Page({
  data: {
    object: {
      key: &#39;Hello &#39;
    },
    array: [&#39;MINA&#39;]
  }
})

组合

也可以在Mustache内直接进行组合,构成新的对象或者数组
数组

<view wx:for-items="{{[zero, 1, 2, 3, 4]}}"> {{item}} </view>

Page({
  data: {
    zero: 0
  }
})

最终组合成数组[0, 1, 2, 3, 4]
对象

<template is="objectCombine" data="{{for: a, bar: b}}"></template>

Page({
  data: {
    a: 1,
    b: 2
  }
})

最终组合成的对象是{for: 1, bar: 2}

也可以用扩展运算符...来将一个对象展开

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

如果对象的key和value相同,也可以间接地表达

<template is="objectCombine" data="{{foo, bar}}"></template>

Page({
  data: {
    foo: &#39;my-foo&#39;,
    bar: &#39;my-bar&#39;
  }
})

最终组合成的对象是{foo: &#39;my-foo&#39;, bar:&#39;my-bar&#39;}

注意:上述方式可以随意组合,但是如有存在变量名相同的情况,后边的会覆盖前面,如

<template is="objectCombine" data="{{...obj1, ...obj2, a, c: 6}}"></template>

Page({
  data: {
    obj1: {
      a: 1,
      b: 2
    },
    obj2: {
      b: 3,
      c: 4
    },
    a: 5
  }
})

最终组合成的对象是{a: 5, b: 3, c: 6}

2. 조건부 렌더링

아아앙

wx:if

미나에서는 우리 코드 블록을 렌더링해야 하는지 여부를 결정하려면 wx:if="{{condition}}"을 사용하세요:

<br/>

wx:elifwx:else를 사용하여 else 블록을 추가할 수도 있습니다:

3c606e1b97da21723c70a4ab47bb0678 True de5f4c1163741e920c998275338d29b2

block wx: if

wx:if는 제어 속성이므로 태그에 추가해야 합니다. 그러나 여러 구성 요소 태그를 한 번에 판단하려면 2b5957c2850173214f4ea7f1261e9a0f 태그를 사용하여 여러 구성 요소를 래핑하고 그 위에 wx:if 제어 속성을 사용할 수 있습니다.

5904a992bd6308add0f2abf1f981b0d1 5}}"> 1 de5f4c1163741e920c998275338d29b27f2cdb4f9f7287f6dc7b3deed0ef223c 2}}"> 2 de5f4c1163741e920c998275338d29b24c5a0e488bddc8c4ab9c2c6dc9e1bbc4 3 de5f4c1163741e920c998275338d29b2

참고: 2b5957c2850173214f4ea7f1261e9a0f는 구성 요소가 아니며 페이지에서 렌더링을 수행하지 않고 컨트롤 속성만 허용하는 래핑 요소일 뿐입니다.

wx:if vs hidden

wx:if의 템플릿에도 데이터 바인딩이 포함될 수 있으므로 wx:if 스위치의 조건부 값이 있을 때 MINA 전환 시 조건부 블록이 파괴되거나 다시 렌더링되도록 보장하기 때문에 로컬 렌더링 프로세스가 있습니다.

동시에 wx:iflazy입니다. 초기 렌더링 조건이 false인 경우 MINA는 아무것도 하지 않고 처음으로 조건이 true가 될 때만 부분 렌더링을 시작합니다. 시간. .

이에 비해 hidden는 훨씬 간단하며 구성 요소는 항상 렌더링되며 표시하고 숨기는 간단한 컨트롤입니다.

일반적으로 wx:if의 전환 비용이 더 높고 hidden의 초기 렌더링 비용이 더 높습니다. 따라서 빈번한 전환이 필요한 경우 hidden를 사용하는 것이 좋으며 런타임 중에 조건이 변경될 가능성이 없다면 wx:if을 사용하는 것이 좋습니다.

2ef10c6f8dda33bfc9f72b211b138cae  89c662c6f8b87e82add978948dc499d2 view1 de5f4c1163741e920c998275338d29b2  89c662c6f8b87e82add978948dc499d2 view2 de5f4c1163741e920c998275338d29b236b196a5d42bcd29e331cb722979f9a6

  3. TP의 volist for 루프와 유사한 목록 렌더링

<br/>

 4. WeChat 애플릿 템플릿(템플릿)


在组件上使用wx:for控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。

默认数组的当前项的下标变量名默认为index,数组当前项的变量名默认为item

<view wx:for="{{items}}">
  {{index}}: {{item.message}}
</view>

Page({
  items: [{
    message: &#39;foo&#39;,
  },{
    message: &#39;bar&#39;
  }]
})

使用wx:for-item可以指定数组当前元素的变量名

使用wx:for-index可以指定数组当前下标的变量名:

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

wx:for也可以嵌套,下边是一个九九乘法表

<view wx:for="{{[1, 2, 3, 4, 5, 6, 7, 8, 9]}}" wx:for-item="i">
  <view wx:for="{{[1, 2, 3, 4, 5, 6, 7, 8, 9]}}" wx:for-item="j">
    <view wx:if="{{i <= j}}">
      {{i}} * {{j}} = {{i * j}}
    </view>
  </view>
</view>

block wx:for

类似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 的值以两种形式提供

    字符串,代表在 for 循环的 array 中 item 的某个 property,该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。
    保留关键字 *this 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字,如:

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

如不提供 wx:key,会报一个 warning, 如果明确知道该列表是静态,或者不必关注其顺序,可以选择忽略。

示例代码:

<switch wx:for="{{objectArray}}" wx:key="unique" style="display: block;"> {{item.id}} </switch>
<button bindtap="switch"> Switch </button>
<button bindtap="addToFront"> Add to the front </button>

<switch wx:for="{{numberArray}}" wx:key="*this" style="display: block;"> {{item}} </switch>
<button bindtap="addNumberToFront"> Add to the front </button>

Page({
  data: {
    objectArray: [
      {id: 5, unique: &#39;unique_5&#39;},
      {id: 4, unique: &#39;unique_4&#39;},
      {id: 3, unique: &#39;unique_3&#39;},
      {id: 2, unique: &#39;unique_2&#39;},
      {id: 1, unique: &#39;unique_1&#39;},
      {id: 0, unique: &#39;unique_0&#39;},
    ],
    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: &#39;unique_&#39; + 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
    })
  }

 4. WeChat 애플릿 이벤트

  • 이벤트는 뷰 계층에서 논리 계층으로의 통신 방법입니다.

  • 이벤트는 처리를 위해 사용자 행동을 논리 계층에 피드백할 수 있습니다.

  • 이벤트는 트리거 이벤트에 도달하면 논리 계층의 해당 이벤트 처리 기능이 실행됩니다.

  • 이벤트 객체는 ID, 데이터세트, 터치와 같은 추가 정보를 전달할 수 있습니다.

  • 아아앙

    5. 위챗 미니 프로그램 명언

模板

WXML提供模板(template),可以在模板中定义代码片段,然后在不同的地方调用。
定义模板

使用name属性,作为模板的名字。然后在dcdc0fa59b5fea5bdae0d810c3919fcd内定义代码片段,如:54f3d529338bcb741f3f99c26e3641df769ceea5cd9767431e1522ad1a80c4b7
  89c662c6f8b87e82add978948dc499d2
    28f128881ce1cdc57a572953e91f7d0f {{index}}: {{msg}} 273e21371c5d5e701d3c98517a0bfa41
    28f128881ce1cdc57a572953e91f7d0f Time: {{time}} 273e21371c5d5e701d3c98517a0bfa41
  de5f4c1163741e920c998275338d29b221c97d3a051048b8e55e3c8f199a54b2使用模板

使用is属性,声明需要的使用的模板,然后将模板所需要的data传入,如:7408c80bece4f027af9069cb341d6f1ePage({
  data: {
    item: {
      index: 0,
      msg: 'this is a template',
      time: '2016-09-15'
    }
  }
})

is属性可以使用Mustache语法,在运行时来决定具体需要渲染哪个模板:a7aa616cf334cfb0c46dfd3392f697bb
  89c662c6f8b87e82add978948dc499d2 odd de5f4c1163741e920c998275338d29b221c97d3a051048b8e55e3c8f199a54b21f0183d7dfbe7295e489a9cb7801cb56
  89c662c6f8b87e82add978948dc499d2 even de5f4c1163741e920c998275338d29b221c97d3a051048b8e55e3c8f199a54b244b5fe78fd5b48925cbe5d337b26ca72
    9893b24784abbe1b3cf40bb848045aa936b196a5d42bcd29e331cb722979f9a6

{{view view layer}} WeChat 애플릿과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 참고하세요. !

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.