2019-01-15 微信小程序开发学习--页面事件和数据绑定

数据绑定 

微信小程序的数据绑定与vue相似,数据来源是通过js 中的data来绑定

在js的page中定义数据,数据格式不限制,定义如下:

在页面中访问数据的时候用{{}}符号调用这些数据即可,并且这些数据在js的函数中可以使用setData()函数来改变数据,具体函数可参看下面的bingChange函数 (注意:在页面中复制为true和false的时候必须加上{{}}否则不识别)

data: {

  open: false ,

    src:'',

    motto: 'Hello World',

    userInfo: {},

    hasUserInfo: false,    system:{},    item:[    ],

    currentTab:0,

}

  bindChange: function (e) {

  var that = this;

  that.setData({

  currentTab: e.detail.current

  });

 },

数据的操作

       在页面的操作中,我们需要对data中的数据进行增删改查来实现一些功能,但是由于微信小程序的数据是单向绑定的,所以我们在操作完数据后需要用setData函数来更新视图,显示的内容才能改变,而setData函数也比较特殊,只支持key-value数据操作,这样操作就比较麻烦。(注:在删除和修改的操作中我们需要知道所修改和删除的数据在数组的位置,我用的方法是在循环读出数组的时候,在每个数据上设置了一个id就是数据的索引)

     我的数据如下:

page({

    data:{

   wenzhang:[

    {

      name:'随心远行',      collection: 2,

      collected:false,

      collSrc:'/images/use_sc.png',

      reading: 1,

      date: '2016-8-13'    },

    {

      name: '开心麻花',      collection: 6,

      collSrc:'/images/use_sc.png',

      collected:false,

      reading: 3,

      date:'2017-8-13'    }]

    }

    })

1、添加

  可以使用js的push,将要插入的数据插入,但是如果有向前如或者向后插入的话可以用js的concat()来实现

//向前增加数据

add_before:function (){

//要增加的数组

varnewarray = [{

name:'随心远行',

collection: 2,

collected:false,

collSrc:'/images/use_sc.png',

reading: 1,

date: '2016-8-13'

}]; //使用concat()来把两个数组合拼起来

this.data.wenzhang = newarray.concat(this.data.wenzhang );

 //将合拼之后的数据,发送到视图层,即渲染页面 //大伙请记录,修改了数据后,一定要再次执行`this.setData()`,页面才会渲染数据的。

this.setData({

 'wenzhang ':this.data.wenzhang

 }); 


  向后插入数据

//向后增加数据add_after:function (){

    //要增加的数组varnewarray = [{

   name:'随心远行',

   collection: 2,

   collected:false,

   collSrc:'/images/use_sc.png',

   reading: 1,

   date: '2016-8-13'

}];

this.setData({

 'wenzhang':this.data.wenzhang.concat(newarray) 

}); 

},

2、修改

  在修改的时候,可以像上面那样直接对数据修改,然后用setData函数更新,也可以直接赋值,直接将要改变的值作为key语法报错,因此就将要改变的值提前用变量替换,然后再赋值,数据改变,页面也重新渲染。

collect:function (e) {

    console.log(e.currentTarget.dataset);

    varthat =this;

    varindex = e.currentTarget.dataset.id

//要删除的数据的在数组中的索引

console.log(index); 

if(!that.data.wenzhang[index].collected){ 

// this.data.wenzhang[index].collection += 1;

varwenzhanglist = that.data.wenzhang

 // wenzhanglist[index].collection += 1;

var up = "wenzhang[" + index + "].collection"; 

var up2 = "wenzhang[" + index + "].collSrc"; varup3 = "wenzhang[" + index + "].collected"; 

// console.log(wenzhanglist); 

that.setData({

 [up]: wenzhanglist[index].collection += 1, 

[up2]:'/images/shced.png', [up3]: 'true' 

}); 

}

3、删除

 删除数组的数据的时候就定位到元素,用splice函数删除splice(数据的位置,删除的个数),普通数据可以用直接赋值为空的方式进行删除

showping:function(e){

    console.log(e.currentTarget.dataset);

    varindex = e.currentTarget.dataset.id  //要删除的数据的在数组中的索引

    console.log(index);

      this.data.wenzhang.splice(index, 1);

      this.setData({

        wenzhang: this.data.wenzhang

      });

  },


事件绑定

1、绑定事件

在微信小程序中页面事件响应机制是,在页面绑定事件,然后在js的page中定义相应的事件处理函数,就可以了。事件的参数可以在标签中加上data-xxx=""来添加,读取的时候event.currentTarget.dataset就可以获取设置的参数,微信小程序的事件返回值中包含了一些位置信息,触发对象的一些信息等,log一下就可以看到,这里用的currentTarget中是绑定事件当前组件的一些信息,包括id和组件中data-xx中绑定的数据。

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

Page({

  tapName: function(event) {

    console.log(event)

  }

})

2、事件详解

微信小程序的事件类型很多,这些事件都可以用bind进行绑定,他们的执行顺序如下:

单击 touchstart → touchend → tap

双击 touchstart → touchend → tap → touchstart → touchend → tap

长按 touchstart → longtap → touchend → tap

但是这些事件都是冒泡事件,如果需要取消冒泡的话,可以采用capture-bind、capture-catch关键字,后者将中断捕获阶段和取消冒泡阶段。官方使用代码如下:

//只触发handleTap2

<view id="outer" bind:touchstart="handleTap1" capture-catch:touchstart="handleTap2">  outer view

  <view id="inner" bind:touchstart="handleTap3" capture-bind:touchstart="handleTap4">    inner view

  </view></view>

//先后调用handleTap2、handleTap4、handleTap3、handleTap1

<view id="outer"bind:touchstart="handleTap1"capture-bind:touchstart="handleTap2">outer view

<view id="inner"bind:touchstart="handleTap3"capture-bind:touchstart="handleTap4">inner view

</view>

</view>


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

推荐阅读更多精彩内容