>

乐百家前段:{{view 视图层}}微信小程序

- 编辑:乐百家599手机首页 -

乐百家前段:{{view 视图层}}微信小程序

wxml:

Page({ /** * 页面的初始数据 */ data: { noSelect: 'https://xxxxx/ic_report_nor@2x.png', hasSelect: 'https://xxxxx/ic_check_ele@2x.png', repContent: [{ message: '广告内容' }, { message: '不友善内容' }, { message: '垃圾内容' }, { message: '违法违规内容' }, { message: '其他' }], selectIndex: [ { sureid: false }, { sureid: false }, { sureid: false }, { sureid: false }, { sureid: false }, ], }, /** * 生命周期函数--监听页面加载 */ onLoad: function  { }, selectRep:function{ let index = e.currentTarget.dataset.selectindex; //当前点击元素的自定义数据,这个很关键 let selectIndex = this.data.selectIndex; //取到data里的selectIndex selectIndex[index].sureid = !selectIndex[index].sureid; //点击就赋相反的值 this.setData({ selectIndex: selectIndex //将已改变属性的json数组更新 }) }})

wx:if

在MINA中,我们用wx:if="{{condition}}"来决断是不是需求渲染该代码块:

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

也能够用wx:elifwx:else来增多1个else块:

<view wx:if="{{length > 5}}"> 1 </view>
<view wx:elif="{{length > 2}}"> 2 </view>
<view wx:else> 3 </view>

微信小程序 教程之事件,微信小程序教程

漫山遍野小说:

微信小程序 教程之WXSS
微信小程序 教程之引用
微信小程序 教程之事件
微信小程序 教程之模板
微信小程序 教程之列表渲染
微信小程序 教程之标准渲染
微信小程序 教程之数据绑定
微信小程序 教程之WXML

怎么是事件

  1. 事件是视图层到逻辑层的报纸发表方式。
  2. 事件能够将用户的行为上报到逻辑层举行管理。
  3. 事件能够绑定在组件上,当到达触发事件,就能够推行逻辑层中对应的事件管理函数。
  4. 事件指标能够指点额外新闻,如id, dataset, touches。

事件的使用情势

在组件中绑定一个事件管理函数。

如bindtap,当用户点击该零件的时候会在该页面前遭逢应的Page中找到呼应的事件管理函数。

<view id="tapTest" data-hi="MINA" bindtap="tapName"> Click me! </view>

在对应的Page定义中写上相应的事件处理函数,参数是event。

Page({
 tapName: function(event) {
 console.log(event)
 }
})

能够看来log出来的音信大约如下

{
"type": "tap",
"timeStamp": 1252,
"target": {
 "id": "tapTest",
 "offsetLeft": 0,
 "offsetTop": 0,
 "dataset": {
 "hi": "MINA"
 }
},
"currentTarget": {
 "id": "tapTest",
 "offsetLeft": 0,
 "offsetTop": 0,
 "dataset": {
 "hi": "MINA"
 }
},
"touches": [{
 "pageX": 30,
 "pageY": 12,
 "clientX": 30,
 "clientY": 12,
 "screenX": 112,
 "screenY": 151
}],
"detail": {
 "x": 30,
 "y": 12
}
}

事件详解

事件分类

事件分为冒泡事件和非冒泡事件

一.冒泡事件:当一个零部件上的轩然大波被触发后,该事件会向父节点传递。

2.非冒泡事件:当1个零件上的风云被触发后,该事件不会向父节点传递。

WXML的冒泡事件列表:

类型 触发条件
touchstart 手指触摸
touchmove 手指触摸后移动
touchcancel 手指触摸动作被打断,如来电提醒,弹窗
touchend 手指触摸动作结束
tap 手指触摸后离开
longtap 手指触摸后,超过350ms再离开

注:除上表之外的别的零件自定义事件都以非冒泡事件,如<form/>的submit事件,<input/>的input事件,<scroll-view/>的scroll事件,(详见各种零部件)

事件绑定

事件绑定的写法同组件的性质,以key、value的样式。

key以bind或catch初始,然后跟上事件的花色,如bindtap, catchtouchstart

value是三个字符串,要求在对应的Page中定义同名的函数。不然当触发事件的时候会报错。

bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。

乐百家前段 ,如在下面那个例子中,点击inner view会先后触发handleTap一和handleTap2(因为tap事件会冒泡到middle view,而middle view阻止了tap事件冒泡,不再向父节点传递),点击middle view会触发handleTap贰,点击outter view会触发handleTap1。

<view id="outter" bindtap="handleTap1">
 outer view
 <view id="middle" catchtap="handleTap2">
 middle view
 <view id="inner" bindtap="handleTap3">
  inner view
 </view>
 </view>
</view>

事件指标

如无特殊表达,当组件触发事件时,逻辑层绑定该事件的管理函数会收到多个事件目的。

事件指标的属性列表:

属性 类型 说明
type String 事件类型
timeStamp Integer 事件生成时的时间戳
target Object 触发事件的组件的一些属性值集合
currentTarget Object 当前组件的一些属性值集合
touches Array 触摸事件,触摸点信息的数组
detail Object 额外的信息

通用事件类型

timeStamp

该页面打开到触发事件所经过的飞秒数。

target

接触事件的源组件。

属性 说明
id 事件源组件的id
dataset 事件源组件上由data-开头的自定义属性组成的集合
offsetLeft, offsetTop 事件源组件的坐标系统中偏移量

currentTarget

事件绑定的此时此刻组件。

属性 说明
id 当前组件的id
dataset 当前组件上由data-开头的自定义属性组成的集合
offsetLeft, offsetTop 当前组件的坐标系统中偏移量

表达: target和currentTarget能够参照他事他说加以考查上例中,点击inner view时,handleTap叁收到的事件目的target和currentTarget都以inner,而handleTap二收到的风浪目的target正是inner,currentTarget就是middle

dataset

在组件中能够定义数据,这几个多少将会通过事件传递给SEEscortVICE。 书写情势: 以data-开端,多少个单词由连字符-链接,不可能有大写(大写会活动转成小写)如data-element-type,最后在event.target.dataset中会将连字符转成驼峰elementType。

示例:

<view data-alpha-beta="1" data-alphaBeta="2" bindtap="bindViewTap"> DataSet Test </view>

Page({
 bindViewTap:function(event){
 event.target.dataset.alphaBeta == 1 // - 会转为驼峰写法
 event.target.dataset.alphabeta == 2 // 大写会转为小写
 }
})

touches

touches是多个触摸点的数组,各个触摸点包蕴以下属性:

属性 说明
pageX,pageY 距离文档左上角的距离,文档的左上角为原点 ,横向为X轴,纵向为Y轴
clientX,clientY 距离页面可显示区域(屏幕除去导航条)左上角距离,横向为X轴,纵向为Y轴
screenX,screenY 距离屏幕左上角的距离,屏幕左上角为原点,横向为X轴,纵向为Y轴

特出事件所辅导的数码,如表单组件的付出事件会指点用户的输入,媒体的谬误事件会带走错误消息,详见组件定义中相继事件的定义。

谢谢阅读,希望能支援到我们,谢谢大家对本站的支撑!

教程之事件,微信小程序教程 体系小说: 微信小程序 教程之WXSS 微信小程序 教程之引用 微信小程序 教程之事件 微信小程序...

以上正是本文的全体内容,希望对大家的求学抱有支持,也意在我们多多帮衬脚本之家。

wxml:

 

 <view class="sel-box">
   /**用wx:for来进行列表渲染**/
  <view wx:for="{{repContent}}" class="multi-selection">
   <text>{{item.message}}</text>
   /**利用数组的下标index来进行判断是哪个的事件**/
   <image src="{{selectIndex[index].sureid? hasSelect : noSelect}}" class="multi-img" data-selectIndex="{{index}}" bindtap="selectRep" />
  </view>
 </view>

js:

微信小程序 view 视图层//自学

乐百家前段 1

直接上代码:

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为数组的key,item为value值;可以通过wx:for-index="i"更改为i,wx:for-item="vo"更改为vo值;

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

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

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

Page({
  items: [{
    message: 'foo',
  },{
    message: 'bar'
  }]
})

使用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: '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; 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: 'unique_'   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. 微信小程序 模板(template)

模板

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

使用name属性,作为模板的名字。然后在<template/>内定义代码片段,如:

<!--
  index: int
  msg: string
  time: string
-->
<template name="msgItem">
  <view>
    <text> {{index}}: {{msg}} </text>
    <text> Time: {{time}} </text>
  </view>
</template>

使用模板

使用is属性,声明需要的使用的模板,然后将模板所需要的data传入,如:

<template is="msgItem" data="{{...item}}"/>

Page({
  data: {
    item: {
      index: 0,
      msg: 'this is a template',
      time: '2016-09-15'
    }
  }
})

is属性可以使用Mustache语法,在运行时来决定具体需要渲染哪个模板:

<template name="odd">
  <view> odd </view>
</template>
<template name="even">
  <view> even </view>
</template>

<block wx:for="{{[1, 2, 3, 4, 5]}}">
    <template is="{{item % 2 == 0 ? 'even' : 'odd'}}"/>
</block>

 4. 微信小程序 事件

 

  • 事件是视图层到逻辑层的简报方式。
  • 事件能够将用户的作为举报到逻辑层实行管理。
  • 事件能够绑定在组件上,当达到触发事件,就能够实行逻辑层中对应的事件管理函数。
  • 事件指标能够指引额外音信,如id, dataset, touches。
  • 1 事件的采纳格局

    2 
    3     在组件中绑定一个事件处理函数。 
    4 
    5 如bindtap,当用户点击该组件的时候会在该页面对应的Page中找到相应的事件处理函数。
    6 
    7 <view id="tapTest" data-hi="MINA" bindtap="tapName"> Click me! </view>
    8 
    9     在相应的Page定义中写上相应的事件处理函数,参数是event。 
    

    拾 1一 Page({ 12 tapName: function(event) { 一3 console.log(event) 1四 } 15 }) 1陆 一七 能够看出log出来的新闻大约如下 18 1玖 { 20 "type": "tap", 2一 "timeStamp": 1252, 2二 "target": { 23 "id": "tapTest", 24 "offsetLeft": 0, 二5 "offsetTop": 0, 二6 "dataset": { 2柒 "hi": "MINA" 2八 } 2九 }, 30 "currentTarget": { 3一 "id": "tapTest", 32 "offsetLeft": 0, 3三 "offsetTop": 0, 3四 "dataset": { 3伍 "hi": "MINA" 3六 } 3七 }, 3八 "touches": [{ 3九 "pageX": 30, 40 "pageY": 1二, 肆一 "clientX": 30, 4二 "clientY": 1二, 四叁 "screenX": 11二, 44 "screenY": 151 4五 }], 四陆 "detail": { 4七 "x": 30, 4捌 "y": 12 4玖 } 50 } 5一 5二 事件详解 五三 事件分类 5四 5伍 事件分为冒泡事件和非冒泡事件 5陆 57 冒泡事件:当二个零部件上的轩然大波被触发后,该事件会向父节点传递。 58 非冒泡事件:当贰个组件上的风浪被触发后,该事件不会向父节点传递。 59 60 WXML的冒泡事件列表: 六一 类型 触发条件 6贰 touchstart 手指触摸 六三 touchmove 手指触摸后活动 6肆 touchcancel 手指触摸动作被打断,释迦牟尼电提醒,弹窗 6伍 touchend 手指触摸动作停止 66 tap 手指触摸后离开 67 longtap 手指触摸后,超越350ms再离开 6八 6玖 注:除上表之外的其他零件自定义事件都以非冒泡事件,如

    的submit事件,的input事件,的scroll事件,(详见各种零部件) 70 事件绑定 7壹 7二 事件绑定的写法同组件的质量,以key、value的样式。 7三 7四 key以bind或catch起首,然后跟上事件的体系,如bindtap, catchtouchstart 75 value是3个字符串,要求在对应的Page中定义同名的函数。不然当触发事件的时候会报错。 76 7七 bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻挡冒泡事件向上冒泡。 7八 7九 如在底下那几个事例中,点击inner view会先后触发handleTap一和handleTap二(因为tap事件会冒泡到middle view,而middle view阻止了tap事件冒泡,不再向父节点传递),点击middle view会触发handleTap2,点击outter view会触发handleTap一。 80 八一 82 outer view 83 84 middle view 85 86 inner view 87 88 89 90 九一 事件目标 玖二 九三 如无特殊表明,当组件触发事件时,逻辑层绑定该事件的管理函数会收到1个事变目的。 九四 玖五 事件目的的习性列表: 玖陆 属性 类型 表明 九七 type String 事件类型 9⑧ timeStamp Integer 事件生成时的年华戳 9玖 target Object 触发事件的零部件的局地属性值集合 十0 currentTarget Object 当前组件的片段属性值会集 10一 touches Array 触摸事件,触摸点音信的数组 拾贰 detail Object 额外的音讯 拾3 Custom伊芙nt 自定义事件指标属性列表(承袭 Base伊夫nt): 10四 属性 类型 表明 十五 detail Object 额外的音信 十六 十7 Touch伊芙nt 触摸事件对象属性列表(承袭 Base伊芙nt): 拾捌 属性 类型 说明 10九 touches Array 触摸事件,当前滞留在荧屏中的触摸点音信的数组 110 changedTouches Array 触摸事件,当前变化的触摸点新闻的数组 11一 11二 特殊事件: 中的触摸事件不可冒泡,所以并未有 currentTarget。 1一三 11四 type 1壹伍 通用事件类型 11陆 timeStamp 1一柒 11八 该页面张开到触发事件所通过的飞秒数。 119 target 120 1贰1 触发事件的源组件。 12贰 属性 表达 1二3 id 事件源组件的id 12④ dataset 事件源组件上由data-开始的自定义属性组成的集结 1二⑤ offsetLeft, offsetTop 事件源组件的坐标体系中偏移量 1二6 currentTarget 1二柒 128 事件绑定的近些日子组件。 12玖 属性 类型 表明 130 id String 当前组件的id 13一 tagName String 当前组件的类型 132 dataset Object 当前组件上由data-起始的自定义属性组成的集合 13叁 13四 表达: target 和 currentTarget 能够参谋上例中,点击 inner view 时,handleTap叁 收到的事件指标 target 和 currentTarget 都以 inner,而 handleTap二 收到的轩然大波目的 target 正是 inner,currentTarget 正是 middle。 135 dataset 136 壹三7 在组件中可以定义数据,这么些多少校会透过事件传递给 SE索罗德VICE。 书写格局: 以data-伊始,多少个单词由连字符-链接,不可能有大写(大写会活动转成小写)如data-element-type,最后在 event.target.dataset 中会将连字符转成驼峰elementType。 138 13玖 示范: 140 141 DataSet Test 14二 14三 Page({ 144 bindViewTap:function(event){ 1四伍 event.target.dataset.阿尔法Beta === 壹 // - 会转为驼峰写法 146 event.target.dataset.alphabeta === 2 // 大写会转为小写 14七 } 14八 }) 14九 150 touches 151 152 touches 是3个数组,各个成分为1个 Touch 对象(canvas 触摸事件中指导的 touches 是 CanvasTouch 数组)。 表示近期滞留在荧屏上的触摸点。 一伍叁 Touch 对象 15四 属性 类型 表达 15五 identifier Number 触摸点的标志符 15六 pageX, pageY Number 距离文书档案左上角的相距,文书档案的左上角为原点 ,横向为X轴,纵向为Y轴 1五七 clientX, clientY Number 距离页面可展现区域(显示屏除去导航条)左上角距离,横向为X轴,纵向为Y轴 158 CanvasTouch 对象 15玖 属性 类型 表明 特殊表明 160 identifier Number 触摸点的标志符
    1陆1 x, y Number 距离 Canvas 左上角的离开,Canvas 的左上角为原点 ,横向为X轴,纵向为Y轴
    16二 changedTouches 1六叁 16肆 changedTouches 数据格式同 touches。 表示有转变的触摸点,如从无变有(touchstart),地方变动(touchmove),从有变无(touchend、touchcancel)。 1陆五 detail 16陆 16七 自定义事件所带领的数量,如表单组件的交给事件会带走用户的输入,媒体的不当事件会辅导错误新闻,详见组件定义中逐条事件的概念。

     5. 微信小程序 引用

 

引用

两种方式:
一、import
二、inclode

import

import可以在该文件中使用目标文件定义的template,如:

在item.wxml中定义了一个叫item的template:

<!-- item.wxml -->
<template name="item">
  <text>{{text}}</text>
</template>

在index.wxml中引用了item.wxml,就可以使用item模板:

<import src="item.wxml"/>
<template is="item" data="{{text: 'forbar'}}"/>

import的作用域

import有作用域的概念,即只会import目标文件中定义的template,而不会import目标文件import的template。

如:C import B,B import A,在C中可以使用B定义的template,在B中可以使用A定义的template,但是C不能使用A定义的template。

<!-- A.wxml -->
<template name="A">
  <text> A template </text>
</template>

<!-- B.wxml -->
<import src="A.wxml"/>
<template name="B">
  <text> B template </text>
</template>

<!-- C.wxml -->
<import src="B.wxml"/>
<template is="A"/>  <!-- Error! Can not use tempalte when not import A. -->
<template is="B"/>

include

include可以将目标文件除了<template/>的整个代码引入,相当于是拷贝到include位置,如:

<!-- index.wxml -->
<include src="header.wxml"/>
<view> body </view>
<include src="footer.wxml"/>

<!-- header.wxml -->
<view> header </view>

<!-- footer.wxml -->
<view> footer </view>

 

本文由乐百家前段发布,转载请注明来源:乐百家前段:{{view 视图层}}微信小程序