微信小程序 view 视图层//自学
1.数据绑定
数据绑定 WXML中的动态数据均来自对应Page的data。 简单绑定 数据绑定使用"Mustache"语法(双大括号)将变量包起来,可以作用于: 内容登录后复制{{ message }} Page({ data: { message: 'Hello MINA!' } }) 组件属性(需要在双引号之内)Page({ data: { id: 0 } }) 控制属性(需要在双引号之内) Page({ data: { condition: true } }) 关键字(需要在双引号之内) true:boolean 类型的 true,代表真值。 false: boolean 类型的 false,代表假值。 特别注意:不要直接写 checked="false",其计算结果是一个字符串,转成 boolean 类型后代表真值。 运算 可以在{{}}内进行简单的运算,支持的有如下几种方式: 三元运算 Hidden 算数运算{{a + b}} + {{c}} + d Page({ data: { a: 1, b: 2, c: 3 } }) view中的内容为3 + 3 + d 逻辑判断5}}"> 字符串运算{{"hello" + name}} Page({ data:{ name:"MINA" } }) 数据路径运算{{object.key}} {{array[0]}} Page({ data: { object: { key: 'Hello ' }, array: ['MINA'] } }) 组合 也可以在Mustache内直接进行组合,构成新的对象或者数组 数组{{item}} Page({ data: { zero: 0 } }) 最终组合成数组[0, 1, 2, 3, 4] 对象 Page({ data: { a: 1, b: 2 } }) 最终组合成的对象是{for: 1, bar: 2} 也可以用扩展运算符...来将一个对象展开 Page({ data: { obj1: { a: 1, b: 2 }, obj2: { c: 3, d: 4 } } }) 最终组合成的对象是{a: 1, b: 2, c: 3, d: 4, e: 5} 如果对象的key和value相同,也可以间接地表达 Page({ data: { foo: 'my-foo', bar: 'my-bar' } }) 最终组合成的对象是{foo: 'my-foo', bar:'my-bar'} 注意:上述方式可以随意组合,但是如有存在变量名相同的情况,后边的会覆盖前面,如 Page({ data: { obj1: { a: 1, b: 2 }, obj2: { b: 3, c: 4 }, a: 5 } }) 最终组合成的对象是{a: 5, b: 3, c: 6}
2.条件渲染
登录后复制
wx:if
在MINA中,我们用wx:if="{{condition}}"来判断是否需要渲染该代码块:
登录后复制True
也可以用wx:elif和wx:else来添加一个else块:
登录后复制1 2 3
block wx:if
因为wx:if 是一个控制属性,需要将它添加到一个标签上。但是如果我们想一次性判断多个组件标签,我们可以使用一个 标签将多个组件包装起来,并在上边使用wx:if控制属性。
登录后复制view1 view2
注意: 并不是一个组件,它仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性。
wx:if vs hidden
因为wx:if之中的模板也可能包含数据绑定,所有当wx:if的条件值切换时,MINA有一个局部渲染的过程,因为它会确保条件块在切换时销毁或重新渲染。
同时wx:if也是惰性的,如果在初始渲染条件为false,MINA什么也不做,在条件第一次变成真的时候才开始局部渲染。
相比之下,hidden就简单的多,组件始终会被渲染,只是简单的控制显示与隐藏。
一般来说,wx:if有更高的切换消耗而hidden有更高的初始渲染消耗。因此,如果需要频繁切换的情景下,用hidden更好,如果在运行时条件不大可能改变则wx:if较好。
登录后复制
3.列表渲染,类似于TP的volist for循环
在组件上使用wx:for控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。 默认数组的当前项的下标变量名默认为index,数组当前项的变量名默认为item{{index}}: {{item.message}} Page({ items: [{ message: 'foo', },{ message: 'bar' }] }) 使用wx:for-item可以指定数组当前元素的变量名 使用wx:for-index可以指定数组当前下标的变量名:{{idx}}: {{itemName.message}} wx:for也可以嵌套,下边是一个九九乘法表block wx:for 类似block wx:if,也可以将wx:for用在 {{i}} * {{j}} = {{i * j}} 标签上,以渲染一个包含多节点的结构块。例如: wx:key 如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 <input> 中的输入内容, {{index}}: {{item}} 的选中状态),需要使用 wx:key 来指定列表中项目的唯一的标识符。 wx:key 的值以两种形式提供 字符串,代表在 for 循环的 array 中 item 的某个 property,该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。 保留关键字 *this 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字,如: 当数据改变触发渲染层重新渲染的时候,会校正带有 key 的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身的状态,并且提高列表渲染时的效率。 如不提供 wx:key,会报一个 warning, 如果明确知道该列表是静态,或者不必关注其顺序,可以选择忽略。 示例代码: {{item.id}} <button> Switch </button> <button> Add to the front </button>{{item}} <button> Add to the front </button> 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; i4. 微信小程序 模板(template)
模板 WXML提供模板(template),可以在模板中定义代码片段,然后在不同的地方调用。 定义模板 使用name属性,作为模板的名字。然后在内定义代码片段,如:<!-- index: int msg: string time: string-->登录后复制使用模板 使用is属性,声明需要的使用的模板,然后将模板所需要的data传入,如:Page({ data: { item: { index: 0, msg: 'this is a template', time: '2016-09-15' } } }) is属性可以使用Mustache语法,在运行时来决定具体需要渲染哪个模板: {{index}}: {{msg}} Time: {{time}} odd even 4. 微信小程序 事件
事件是视图层到逻辑层的通讯方式。
事件可以将用户的行为反馈到逻辑层进行处理。
事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。
事件对象可以携带额外信息,如id, dataset, touches。
-
1 事件的使用方式 2 3 在组件中绑定一个事件处理函数。 4 5 如bindtap,当用户点击该组件的时候会在该页面对应的Page中找到相应的事件处理函数。 6 7
登录后复制Click me! 8 9 在相应的Page定义中写上相应的事件处理函数,参数是event。 10 11 Page({ 12 tapName: function(event) { 13 console.log(event) 14 } 15 }) 16 17 可以看到log出来的信息大致如下 18 19 { 20 "type": "tap", 21 "timeStamp": 1252, 22 "target": { 23 "id": "tapTest", 24 "offsetLeft": 0, 25 "offsetTop": 0, 26 "dataset": { 27 "hi": "MINA" 28 } 29 }, 30 "currentTarget": { 31 "id": "tapTest", 32 "offsetLeft": 0, 33 "offsetTop": 0, 34 "dataset": { 35 "hi": "MINA" 36 } 37 }, 38 "touches": [{ 39 "pageX": 30, 40 "pageY": 12, 41 "clientX": 30, 42 "clientY": 12, 43 "screenX": 112, 44 "screenY": 151 45 }], 46 "detail": { 47 "x": 30, 48 "y": 12 49 } 50 } 51 52 事件详解 53 事件分类 54 55 事件分为冒泡事件和非冒泡事件 56 57 冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。 58 非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。 59 60 WXML的冒泡事件列表: 61 类型 触发条件 62 touchstart 手指触摸 63 touchmove 手指触摸后移动 64 touchcancel 手指触摸动作被打断,如来电提醒,弹窗 65 touchend 手指触摸动作结束 66 tap 手指触摸后离开 67 longtap 手指触摸后,超过350ms再离开 68 69 注:除上表之外的其他组件自定义事件都是非冒泡事件,如<form/>的submit事件,<input/>的input事件,的scroll事件,(详见各个组件) 70 事件绑定 71 72 事件绑定的写法同组件的属性,以key、value的形式。 73 74 key以bind或catch开头,然后跟上事件的类型,如bindtap, catchtouchstart 75 value是一个字符串,需要在对应的Page中定义同名的函数。不然当触发事件的时候会报错。 76 77 bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。 78 79 如在下边这个例子中,点击inner view会先后触发handleTap1和handleTap2(因为tap事件会冒泡到middle view,而middle view阻止了tap事件冒泡,不再向父节点传递),点击middle view会触发handleTap2,点击outter view会触发handleTap1。 80 81 82 outer view 83 90 91 事件对象 92 93 如无特殊说明,当组件触发事件时,逻辑层绑定该事件的处理函数会收到一个事件对象。 94 95 事件对象的属性列表: 96 属性 类型 说明 97 type String 事件类型 98 timeStamp Integer 事件生成时的时间戳 99 target Object 触发事件的组件的一些属性值集合100 currentTarget Object 当前组件的一些属性值集合101 touches Array 触摸事件,触摸点信息的数组102 detail Object 额外的信息103 CustomEvent 自定义事件对象属性列表(继承 BaseEvent):104 属性 类型 说明105 detail Object 额外的信息106 107 TouchEvent 触摸事件对象属性列表(继承 BaseEvent):108 属性 类型 说明109 touches Array 触摸事件,当前停留在屏幕中的触摸点信息的数组110 changedTouches Array 触摸事件,当前变化的触摸点信息的数组111 112 特殊事件:84 middle view 85 8986 inner view 87 885. 微信小程序 引用
{{text}} A template B template body header footer登录后复制
更多{{view 视图层}}微信小程序相关文章请关注PHP中文网!
免责 声明
1、本网站名称:慧达安全导航
2、本站永久网址:https//www.huida178.com/
3、本站所有资源来源于网友投稿和高价购买,所有资源仅对编程人员及源代码爱好者开放下载做参考和研究及学习,本站不提供任何技术服务!
4、本站所有资源的属示图片和信息不代表本站的立场!本站只是储蓄平台及搬运
5、下载者禁止在服务器和虚拟机下进行搭建运营,本站所有资源不支持联网运行!只允许调试,参考和研究!!!!
6、未经原版权作者许可禁止用于任何商业环境,任何人不得擅作它用,下载者不得用于违反国家法律,否则发生的一切法律后果自行承担!
7、为尊重作者版权,请在下载24小时内删除!请购买原版授权作品,支持你喜欢的作者,谢谢!
8.若资源侵犯了您的合法权益,请持 您的版权证书和相关原作品信息来信通知我们!QQ:1247526623我们会及时删除,给您带来的不便,我们深表歉意!
9、如下载链接失效、广告或者压缩包问题请联系站长处理
10、如果你也有好源码或者教程,可以发布到网站,分享有金币奖励和额外收入!
11、本站资源售价只是赞助,收取费用仅维持本站的日常运营所需
12、因源码具有可复制性,一经赞助,不得以任何形式退款。
13、本文内容由网友自发贡献和站长收集,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系1247526623@qq.com
转载请注明出处: 慧达安全导航 » {{view 视图层}}微信小程序
发表评论 取消回复