数据绑定及渲染
//数据绑定view{{message}}/view//遍历viewwx:for="{{newobj}}"{{item}}{{index}}/view//判断viewwx:if="{{view=='WEBVIEW'}}"WEBVIEW/viewviewwx:elif="{{view=='APP'}}"APP/viewviewwx:else="{{view=='MINA'}}"MINA/view模板
!--wxml--templatename="staffName"viewFirstName:{{firstName}},LastName:{{lastName}}/view/templatetemplateis="staffName"data="{{...staffA}}"/templatetemplateis="staffName"data="{{...staffB}}"/templatetemplateis="staffName"data="{{...staffC}}"/template//page.jsPage({data:{staffA:{firstName:'Hulk',lastName:'Hu'},staffB:{firstName:'Shang',lastName:'You'},staffC:{firstName:'Gideon',lastName:'Lin'}}})事件
事件分为冒泡事件和非冒泡事件:
冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。viewbindtap="add"{{count}}/viewPage({data:{count:1},add:function(e){this.setData({count:this.data.count+1})}})WXML的冒泡事件列表:
类型触发条件最低版本touchstart手指触摸动作开始touchmove手指触摸后移动touchcancel手指触摸动作被打断,如来电提醒,弹窗touchend手指触摸动作结束tap手指触摸后马上离开longpress手指触摸后,超过350ms再离开,如果指定了事件回调函数并触发了这个事件,tap事件将不被触发1.5.0longtap手指触摸后,超过350ms再离开(推荐使用longpress事件代替)transitionend会在WXSStransition或wx.createAnimation动画结束后触发animationstart会在一个WXSSanimation动画开始时触发animationiteration会在一个WXSSanimation一次迭代结束时触发animationend会在一个WXSSanimation动画完成时触发touchforcechange在支持3DTouch的iPhone设备,重按时会触发1.9.90事件绑定和冒泡事件绑定的写法同组件的属性,以key、value的形式。
key以bind或catch开头,然后跟上事件的类型,如bindtap、catchtouchstart。自基础库版本1.5.0起,bind和catch后可以紧跟一个冒号,其含义不变,如bind:tap、、catch:touchstart。value是一个字符串,需要在对应的Page中定义同名的函数。不然当触发事件的时候会报错。bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。
实例解析
如在下边这个例子中,点击innerview会先后调用handleTap3和handleTap2(因为tap事件会冒泡到middleview,而middleview阻止了tap事件冒泡,不再向父节点传递),点击middleview会触发handleTap2,点击outerview会触发handleTap1。
viewid="outer"bindtap="handleTap1"outerviewviewid="middle"catchtap="handleTap2"middleviewviewid="inner"bindtap="handleTap3"innerview/view/view/view事件的捕获阶段自基础库版本1.5.0起,触摸类事件支持捕获阶段。捕获阶段位于冒泡阶段之前,且在捕获阶段中,事件到达节点的顺序与冒泡阶段恰好相反。需要在捕获阶段监听事件时,可以采用capture-bind、capture-catch关键字,后者将中断捕获阶段和取消冒泡阶段。
捕获与冒泡的顺序:在下面的代码中,点击innerview会先后调用handleTap2、handleTap4、handleTap3、handleTap1。
viewid="outer"bind:touchstart="handleTap1"capture-bind:touchstart="handleTap2"outerviewviewid="inner"bind:touchstart="handleTap3"capture-bind:touchstart="handleTap4"innerview/view/view如果将上面代码中的第一个capture-bind改为capture-catch,将只触发handleTap2。
viewid="outer"bind:touchstart="handleTap1"capture-catch:touchstart="handleTap2"outerviewviewid="inner"bind:touchstart="handleTap3"capture-bind:touchstart="handleTap4"innerview/view/viewdatasetdata属性的使用
在组件中可以定义数据,这些数据将会通过事件传递给SERVICE。书写方式:以data-开头,多个单词由连字符-链接,不能有大写(大写会自动转成小写)如data-element-type,最终在event.currentTarget.dataset中会将连字符转成驼峰elementType。
示例:viewdata-alpha-beta="1"data-alphaBeta="2"bindtap="bindViewTap"DataSetTest/viewPage({bindViewTap:function(event){event.currentTarget.dataset.alphaBeta===1//-会转为驼峰写法event.currentTarget.dataset.alphabeta===2//大写会转为小写}})引用WXML提供两种文件引用方式import和include。
importimport可以在该文件中使用目标文件定义的template,如:
在item.wxml中定义了一个叫item的template:
!--item.wxml--templatename="item"text{{text}}/text/template在index.wxml中引用了item.wxml,就可以使用item模板:
importsrc="item.wxml"/templateis="item"data="{{text:'forbar'}}"/import的作用域import有作用域的概念,即只会import目标文件中定义的template,而不会import目标文件import的template。如:CimportB,BimportA,在C中可以使用B定义的template,在B中可以使用A定义的template,但是C不能使用A定义的template。
includeinclude可以将目标文件除了外的整个代码引入,相当于是拷贝到include位置,如:
!--index.wxml--includesrc="header.wxml"/viewbody/viewincludesrc="footer.wxml"/!--header.wxml--viewheader/view!--footer.wxml--viewfooter/view
最新资讯
-

小程序制作平台选型踩坑记录:2026年五大主流方案横向对比
2026 年微信小程序月活达 10.7 亿、覆盖 108 个行业,本次横向对比即速应用、乔拓云、凡科、有赞、微盟五大主流平台,分三阶段给出选型结论,核心聚焦成本、扩展性、运营能力三大维度。 -

即速应用,赋能企业玩转微信小程序智慧经营
作为国内领军的智慧商业经营服务商,即速应用始终秉承“让每个企业都拥有自己的智慧店铺”的愿景,持续赋能更多企业玩转智慧经营。即速应用旗下拥有“小程序搭建工具-即速应用”、“私域流量专家-即客云”等产品,帮助商家打通互联网全生态营销闭环。 -

即客云2.0重磅更新,让微信小程序运营更简单!
即客云作为一款基于企业微信的第三方工具,现从多维度提供超过30种功能,自上线以来,已服务多家企业,受到一致好评。近期,我们根据客户反馈和市场调研正式推出升级版 即客云2.0!更新了私域运营SOP,群日历功能,批量拓客,客户雷达,消息推送,个人欢迎语,帮助企业更好运用企业微信;同时提升了社群运营工作标准化,提升运营效率,帮助企业实现客户增长,玩转私域流量。











