美文网首页微信小程序开发微信小程序开发程序员
小程序开发十一:事件传递和数据dataset

小程序开发十一:事件传递和数据dataset

作者: Mr姜饼 | 来源:发表于2019-12-17 10:50 被阅读0次

    回顾上节课的知识,为大家介绍了模板Template的使用方法,切记,在需要使用的页面文件中,要导入template的路径(.wxml和wxss).

    我们也已经实现了从服务器动态地获取数据并进行页面显示,但是我们并没有实现任何交互的动作,所以这节课就为大家介绍点击的交互事件和数据传递。


    Event1:点击图片预览功能

    首先在需要进行交互的view上,绑定触摸事件,然后在js文件中去实现函数事件的方法。

    <image class="contentImg"  catchtap="lookUpPhoto" mode="aspectFill" src="{{url}}"></image>
    

    代码分析:

    <1>

    首先我们为图片的控件绑定触摸事件,而触摸事件分为两类

    catchTap:事件不进行向下分发,即实现完图片的触摸之后,停止向下级视图分发事件

    bindTap:事件会进行向下分发,即实现完图片的触摸之后,会继续查找下级视图的分发事件

    这里我们只需要点击图片就能预览图片,并不需要后续动作,故此地方,我们使用catchTap。

    接下来,我们在home.js文件中来实现lookUpPhoto函数。

     lookUpPhoto:function(res){
        console.log("点击了图片");
      },
    

    编译运行之后发现

    每次点击图片,都会在控制台输出打印“点击了图片”。

    <2>

    这里我们并没有实现预览的图片,我们需要知道点击的是哪张图片,这样我们才能在lookUpPhoto函数中取实现预览图片的功能,这时候我们就需要进行dataset了。

    <image class="contentImg"  catchtap="lookUpPhoto" data-photourl="{{url}}" mode="aspectFill" src="{{url}}"></image>
    

    这里我们为触摸的image设置了一个data-photoUrl的数据,其值为本身的图片链接,

    并且我们在home.js文件中去取到设置的值。

    lookUpPhoto:function(res){
         var photoUrl = res.currentTarget.dataset.photourl;//取得设置的值
        wx.previewImage({//图片预览的方法
          urls: [photoUrl],//预览的总图片链接
        });
      },
    
    res.currentTarget  //此为获取当前触摸事件的view,这里我们得到的是点击的image
    
     res.currentTarget.dataset  //获取触模视图的设置值(这里是一个对象)
    
     res.currentTarget.dataset.photourl  //获取触模视图的设置值(设置了什么参数,就取什么参数)
    
    

    完成 :这样我们就取到了当前点击的图片链接,并进行了预览


    Event2:点击更多功能拉黑和举报

    首先还是在“更多”按钮的视图上绑定触摸事件

    <image src="/images/home/moreIcon.png" class="moreIcon" catchtap="moreTap" data-userid="{{user_id}}"></image>
    

    这里我们为image视图绑定了“ moreTap”的事件并且设置了参数为userid的用户id。

    接着我们在home.js文件中实现函数方法

    moreTap:function(res){
        var that = this;//防止指针指向错误
        var userId = res.target.dataset.userid;
        console.log("点击了用户" + userId);
        wx.showActionSheet({
          itemList: ["拉黑","举报"],
          itemColor:"red",
          success:function(res){
            console.log(res.tapIndex);
            if (res.tapIndex == 0){//举报
              that.reportUser(userId);
            } else if (res.tapIndex == 1){//拉黑
              wx.showActionSheet({
                itemList: ['语言辱骂','发布不良信息','传播色情暴力','设计敏感话题'],
                itemColor: "red",
                success:function(res){
                  wx.showModal({
                    title: '举报成功',
                    content: '平台将在一个工作日内做出相应处理',
                    cancelText:'',
                    showCancel:false
                  });
                }
              })
            }
          }
        });
      },
    
    reportUser:function(userId){
        wx.showModal({
          title: '拉黑成功',
          content: '已屏蔽此用户的所有动态信息',
          showCancel: false,
        });
      },
    

    Event3:进入动态详情(去到下一页面)

    首先在dynamic-template中添加触摸事件,并且绑定帖子的id

    <view class="dynamicContainer" catchtap="dynamicTap" data-dynamicid="{{_id}}">
    

    然后在home.js文件中实现函数

    dynamicTap:function(res){
        var dynamicId = res.currentTarget.dataset.dynamicid;
        console.log("点击了动态" + dynamicId);
        wx.navigateTo({
          url: '/pages/home/dynamicDeatil/dynamicDeatil?dynamicId=' + dynamicId,
        })
      },
    

    *小知识
    向下一级页面传参可以用下面的方法传递,将参数拼接在新页面路径的后面,作为参数来传递

     url: '/pages/home/dynamicDeatil/dynamicDeatil?dynamicId=' + dynamicId,
    

    下一级页面接受参数用以下方式来获取(在dynamicDeatil页面中来获取上级页面传下来的dynamicId)

    ** dynamicDeatil.js文件**

    onLoad: function (options) {
        console.log(options.dynamicId);//获取从上级页面传下来的动态id
      },
    

    同样,进入新页面的时候,需要在app.json中添加新页面的路径

      "pages": [
        "pages/login/login",
        "pages/home/home",
        "pages/home/dynamicDeatil/dynamicDeatil",
        "pages/home/addNewDynamic/addNewDynamic"
      ],
    

    Event4:添加动态(去到下一页面)

    首先在home.wxml中新增“添加动态”按钮,并且绑定事件“addNewDynamic”

     <view>
        <view class="addNewDynamicBtn" catchtap="addNewDynamic">
          <image class="addIcon" src="/images/home/fabu.png"></image>
        </view>
      </view>
    

    在home.wxss中添加样式

    .addNewDynamicBtn {
      position: fixed;
      bottom: 40rpx;
      left: 610rpx;
      background-color: #50c4e7;
      width: 100rpx;
      height: 100rpx;
      border-radius: 50rpx;
    }
    
    .addIcon{
      width: 70rpx;
      height: 70rpx;
      margin-left: 15rpx;
      margin-top: 15rpx;
    }
    
    

    在home.js中添加

     addNewDynamic:function(res){
        console.log("新增动态");
        wx.navigateTo({
          url: 'addNewDynamic/addNewDynamic',
        });
      },
    

    ps:记住凡是要跳转到新页面,必须在app.json中添加新页面的路径。

    "pages": [
        "pages/login/login",
        "pages/home/home",
        "pages/home/addNewDynamic/addNewDynamic"
      ],
    

    总结:

    事件传递:

    根据实际需求来选择catchTap(不向下传递)和bindTap(向下传递)事件。

    需要在事件中获取什么值,就要配套在绑定中设置什么值

    *单个参数

    设置:

    data-key  = value
    

    取值:

    dataset.key
    

    *多个参数
    设置:

    data-key  =  {'key1' : value1  ,'key2' : value2} 
    

    取值:

    dataset.key.key1  ; dataset.key.key2
    

    下一节:

    传送门:
    十二:事件注册通知与分发通知

    完整项目下载地址:

    相关文章

      网友评论

        本文标题:小程序开发十一:事件传递和数据dataset

        本文链接:https://www.haomeiwen.com/subject/eqfsnctx.html