微信小程序开发(三)小程序开发框架之WXML

  • WXML(WeiXin Markup Language)

    1. 介绍:WXML是框架设计的一套标签语言,结合组件、WXS和事件系统,可以构建出页面的结构

    2.语法:由开始标签和结束标签包裹我们的内容构成,熟悉前端开发的小伙伴肯定明白,WXML就相当于是HTML文件了
    注:WXML的标签一定是闭合的,并且大小写敏感
    <标签名 属性名='属性名1' 属性名='属性名1' ...> ... </标签名>
    如下就是一段WXML代码和展示效果:

    wxml.png

3.WXML特性
(1) 数据绑定
在WXML里通过数据绑定来实现页面数据的动态更新,如气象、股市等页面。WXML中的数据都来自js文件中Page的data对象,数据绑定我们使用Mustache的方法,也就是变量名加{{}}的语法把变量包起来。注意所有的组件和属性都要是小写

//index.wxml
<view>
  <text>{{message}}</text>
</view>
//index.js
Page({
  data:{
    message:"hello world"  
  }
})

数据绑定还可以进行一些运算符绑定,如下:<view>标签里的hidden属性来确定view里面的内容是否显示,我们可以吧data里的flag这个boolean值设置个hidden来动态进行内容的显示隐藏

//index.wxml
<view hideen="{{flag ? true : false}}">
  text
</view>
//index.js
Page({
  data:{
    flag:false
  }
})

小程序的标签组件共有6中共同属性

wxml标签组件属性.png

(2) 列表渲染
在一些网购网站上某个品牌的所有商品要展示出来,当数量比较少的时候我们可以在wxml里一行一行的写,但是当商品数量比较多且不固定时就需要用到小程序的列表渲染的功能。如下:我们在js中定义一个items数组,通过wxml文件里的一个<block>标签中的wx:for属性来绑定items,其中的index变量指的是当前元素在我们的数组里对应的下标,item变量指的是数组中的当前元素。可以通过wx:for-item来指定我们想要的一个变量名,wx:key属性代表了列表中项目的唯一标识符。
注意:<block>标签不是一个组件,只是包装元素,我们在页面渲染的时候可以看到这个标签不会被渲染出来。

//index.wxml
<view>
  <block wx:for="{{items}}" wx:for-item="item" wx:key="index">
    <view>{{index}}:{{item.name}}</view>
  </block>
</view>
//index.js
Page({
  data:{
    items:[
      {name:"商品1"},
      {name:"商品2"},
      {name:"商品3"},
      {name:"商品4"},
    ]
  }
})

(3) 条件渲染
当我们需要在不同的条件下展示不同的内容时就需要用到条件渲染,一般我们通过wx:if wx:elif wx:else这个属性来控制条件渲染。

//index.wxml
<view>今天的晚餐</view>
<view wx:if="{{condition === 1}}" >
  米饭
</view>
<view wx:elif="{{condition === 2}}" >
  粥
</view>
<view wx:else="{{condition === 3}}" >
  面条
</view>
//index.js
Page({
  data:{
    //Math.random()是生成一个0-1的浮点随机数  Math.floor()是对浮点数进行处理,返回一个下取整的整数
    //生成一个1-3的随机整数
    condition : Math.floor(Math.random()*3 + 1)
  }
})

(4) 模板引用
小程序支持在模板中定义自己的代码片段,然后在不同的地方调用或引入。在wxml里我们定义一个tempItem的模板,在<template>标签里定义,name属性是模板名称。使用的时候通过is属性来声明我们使用的是哪个模板,data属性来传入我们想要的数据。模板有自己的作用域,我们只能通过data属性来传入。

//index.wxml
<template name="tempItem">
  <view>
    <view>收件人:{{name}}</view>
    <view>电话:{{phone}}</view>
    <view>地址:{{address}}</view>
  </view>
</template>

<template is="tempItem" data="{{...item}}"></template>
//index.js
Page({
  data:{
    item:{}
      name:"zhangsan"},
      phone:"123456"},
      address:"china"}
    }
  }
})
wxml模板.png

除了模板,wxml还提供了两种文件引入的方式:import和include。
import只能引用我们定义的模板文件里的模板内容。如下,在index.wxml里通过import的src属性引入模板文件的路径a.wxml,通过声明template的is属性来声明使用的是哪个模板。在外部模板文件a.wxml里定义了view和template两个标签,结果渲染出来的只有a.wxml文件里template中的内容。所以说import引入的模板文件它的模板只能渲染它对应的模板内容。

<!--index.wxml-->
<import src="a.wxml"></import>
<template is = "a"></template>

<!--a.wxml-->
<view>hello world</view>
<template name = "a">
  Hello World
</template>
import引用.png

注意import的作用域,如果import的目标文件嵌套了其他文件的template模板,则嵌套的不会被应用。如index.wxml引入了a.wxml目标文件,而a.wxml文件中又引入了b.wxml文件内的模板。最终显示的只有a.wxml文件里的模板内容,而不会显示b.wxml的模板内容。这样可以避免引用模板死循环的问题,如果在a.wxml中引用b.wxml,在b.xwml中引用a.wxml文件,就会造成死循环。

<!--index.wxml-->
<import src="a.wxml"></import>
<template is = "a"></template>

<!--a.wxml-->
<import src="b.wxml"></import>
<template name = "a">
  This is a.wxml
</template>
<template is = "b"></template>

<!--b.wxml-->
<template name = "b">
  This is b.wxml
</template>
import作用域.png

include则是把目标文件内除了模板代码块之外的所有内容都引入进来。如下:在index.wxml文件里我们引入了a.wxml目标文件,a.wxml文件包含了一个name属性是a的template模板以及一个内容时hello world的view标签。最后经过include引入渲染的只有hello world,并没有显示template模板内容

<!--index.wxml-->
<include src="a.wxml"></import>
<template is = "a"></template>

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

推荐阅读更多精彩内容