草庐IT

原生小程序 之事件绑定(数据绑定) 与 事件传参 下拉刷新、触底事件等

不求人0 2023-04-09 原文

目录

原生小程序 之事件绑定 与 时间传参

事件绑定

点击事件 bindtap

  • index.wxml
<view>
  <button bindtap="btn1">按钮</button>
</view>
  • index.js
// pages/about/about.js
Page({
  data: {
  },
  btn1(e){
    console.log("点击事件",e);
  }
})

数据的单向绑定 与 双向数据绑定

  • index.wxml
<view>
  数据单向绑定 value -- {{ value }}
  <input type="text" value="{{ value }}" ></input>
  数据单向绑定 value2 -- {{ value2 }} 手动实现双向数据绑定
  <input type="text" value="{{ value2 }}" bindinput="input1Change"></input>
  数据双向绑定 value3 -- {{ value3 }}
  <input type="text" model:value="{{ value3}}"></input>
</view>
  • index.js
// pages/about/about.js
Page({
  data: {
    value:1,
    value2:2,
    value3:3
  },
// 单向数据 绑定的时候 手动实现 数据双向绑定
  input1Change(e){
    // console.log("input1Change",e,e.detail.value);
    this.setData({
      value2:e.detail.value
    })
  }
})
  • index.wxss
input {
  border: 1px solid #ccc;
}
  • 效果

数据双向绑定的 限制 (只能绑定一个值,对象的属性值不可绑定的)

  • index.wxml
<view>
  obj {{ obj.age }} - {{ obj.value}}
  <input type="text" model:value="{{ obj.value}}"></input>
  value - {{ value }}
  <input type="text" model:value="{{ value}}"></input>
</view>
  • index.js
// pages/about/about.js
Page({
  data: {
    obj:{
     value:1,
     age:10
    },
    value:0
  },
})
  • 效果

数据双向绑定的 实现绑定 对象的属性值

  • index.wxml
<view>
  obj  {{ obj.value}} - {{ obj.age }}
  <input type="text" cursor-spacing="20" value="{{ obj.value}}" bindinput="onInput"
  data-tag="value"
  ></input>
  <input type="number" value="{{ obj.age}}" bindinput="inputAge"
  data-tag="age"
  ></input>
</view>
  • index.js
// pages/about/about.js
Page({
  data: {
    obj:{ 
      value:1,
      age:0
    },
  },
  onInput(e){
    let value = e.detail.value;
    let tag = e.currentTarget.dataset.tag;
    if(value){
      let _target = `obj.${tag}`
      this.setData({
        [_target] : value
      })
    }
  },
  inputAge(e){
    let value = e.detail.value;
    let tag = e.currentTarget.dataset.tag;
    if(value){
      let _target = `obj.${tag}`
      this.setData({
        [_target] : value
      })
    }
  },
})
  • 效果

事件传参

点击按钮,当前按钮 给事件传递了 参数info为2

  • index.wxml
<view>
  value- {{ value }}
  <van-button type="primary" bindtap="btn1" data-info="{{2}}">按钮</van-button>
</view>
  • index.js
// pages/about/about.js
Page({
  data: {
    value:0
  },
  btn1(e){
    console.log("事件传递的参数",e.target.dataset.info); // 2
    this.setData({
      value:this.data.value + e.target.dataset.info
    })
  }
})
  • 效果
    • 点击按钮的时候 value + 2

input 事件 拿到 输入的值

  • index.wxml
<view>
  value- {{ value }}
  <input bindinput="ipt" value="{{value}}"></input>
</view>
  • index.js
// pages/about/about.js
Page({
  data: {
    value:1
  },
  ipt(e){
    console.log("事件传递的参数",e.detail.value); 
    this.setData({
      value: e.detail.value
    })
  }
})

下拉刷新、触底事件等

下拉刷新

全局下拉刷新

  • 不推荐使用

局部页面下拉刷新

  • 推荐使用
  • 下拉刷新样式配置
{
  "usingComponents": {},
  "enablePullDownRefresh": true,
  "backgroundColor": "#010101",
  "backgroundTextStyle": "light"
}
  • 下拉刷新事件
  onPullDownRefresh(){
    console.log("下拉刷新");
  }
  • 停止下拉刷新
  onPullDownRefresh(){
    console.log("下拉刷新");
    wx.stopPullDownRefresh({ // 关闭下拉刷新
      success: (res) => {},
    })
  }

上拉触底

  • 上拉触底函数
  onReachBottom(){
    console.log("上拉触底"); // 节流 限制请求
  }
  • 上拉触底 距离 配置 XXpage.json
{
  "onReachBottomDistance": 100
}

上拉触底 案例

test.wxml

<!--pages/test/test.wxml-->
<view>
  <view wx:for="{{showArr}}"  wx:key="{{ idenx }}" class="list_item">
    {{  item }}
  </view>
  <view wx:if="noMoreDadaFlag"> 数据就只有这么多了 </view>
</view>

test.js

// pages/test/test.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    showArr:[],
    page:1,
    isLoading:false, // 是否可以发起 请求 节流阀
    noMoreDadaFlag:false, // 数据 只有这么多了
  },
  onLoad(options){
    console.log("about-options",options);
    this.getShowArr(this.data.page)
  },
  getShowArr(page){
    this.setData({
      isLoading:true,
      noMoreDadaFlag:false
    })
    wx.showLoading({
      title: '数据加载中。。。',
    })
    // wx.request({
    //   url: 'url',
    //   method:'GET',
    //   success:(res)=>{
    //     console.log(res);
    //   },
    //   // 请求需要再这边 关闭loading
    //   complete:()=>{
    //     wx.hideLoading({
    //       success: (res) => {},
    //     })
    //   }
    // })
    console.log("page",page);
    if ( page == 1) {
      this.setData({
        showArr:[1,2,3,4,5,6,7,8,9,10]
      }) 
      wx.hideLoading()
      this.setData({
        isLoading:false,
      })
    } else if ( page == 2 ) {
      let arr = [11,12,13,14,15,16,17,18,19,20]
      this.setData({
        showArr:[...this.data.showArr,...arr]
      }) 
      wx.hideLoading()
      this.setData({
        isLoading:false,
      })
    } else if ( page >= 3 ) {
      this.setData({
        noMoreDadaFlag:true
      })
      wx.hideLoading()
      this.setData({
        isLoading:false,
      })
    }
  },
  // 上拉触底  节流 限制请求
  onReachBottom(){
    if ( this.data.isLoading ) return ; // 再节流状态
    // 否则 就发起请求
    this.setData({
      page: this.data.page + 1
    })
    this.getShowArr(this.data.page);
  }
})

test.wxss

/* pages/test/test.wxss */
.list_item {
  height: 130rpx;
  line-height: 130rpx;
  text-align: center;
  line-height: 130rpx;
}
  • 效果

有关原生小程序 之事件绑定(数据绑定) 与 事件传参 下拉刷新、触底事件等的更多相关文章

  1. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  2. ruby-on-rails - 创建 ruby​​ 数据库时惰性符号绑定(bind)失败 - 2

    我正在尝试在Rails上安装ruby​​,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf

  3. 微信小程序通过字典表匹配对应数据 - 2

    前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立

  4. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  5. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  6. ruby-on-rails - 事件记录 : Select max of limit - 2

    我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).

  7. ruby-on-rails - 事件管理员和自定义方法 - 2

    这是我在ActiveAdmin中的自定义页面ActiveAdmin.register_page"Settings"doaction_itemdolink_to('Importprojects','settings/importprojects')endcontentdopara"Text"endcontrollerdodefimportprojectssystem"rakedataspider:import_projects_ninja"para"OK"endendend我想做的是,当我单击“导入项目”按钮时,我想在Controller中执行rake任务。但是我无法访问该方法。可能是什

  8. ruby-on-rails - ActiveAdmin 自定义选择过滤器下拉名称 - 2

    对于用户模型,我有一个过滤器来检查用户的预订状态,该状态由整数值(0、1或2)表示。UserActiveAdmin索引页上的过滤器是通过以下代码实现的:filter:booking_status,as::select然而,这会导致下拉选项为0、1或2。当管理员用户从下拉列表中选择它们时,我更愿意自己将它们命名为“未完成”、“待定”和“已确认”之类的名称。有没有办法在不改变booking_status在模型中的表示方式的情况下做到这一点? 最佳答案 假设booking_status是模型中的枚举字段,您可以使用:过滤器:booking

  9. ruby-on-rails - 在不重新查询数据库的情况下重新排序 Rails 中的事件记录? - 2

    例如,假设我有一个名为Products的模型,并且在ProductsController中,我有以下代码用于product_listView以显示已排序的产品。@products=Product.order(params[:order_by])让我们想象一下,在product_listView中,用户可以使用下拉菜单按价格、评级、重量等进行排序。数据库中的产品不会经常更改。我很难理解的是,每次用户选择新的order_by过滤器时,rails是否必须查询,或者rails是否能够以某种方式缓存事件记录以在服务器端重新排序?有没有一种方法可以编写它,以便在用户排序时rails不会重新查询结果

  10. ruby-on-rails - Ruby 长时间运行的进程对队列事件使用react - 2

    我有一个将某些事件写入队列的Rails3应用。现在我想在服务器上创建一个服务,每x秒轮询一次队列,并按计划执行其他任务。除了创建ruby​​脚本并通过cron作业运行它之外,还有其他稳定的替代方案吗? 最佳答案 尽管启动基于Rails的持久任务是一种选择,但您可能希望查看更有序的系统,例如delayed_job或Starling管理您的工作量。我建议不要在cron中运行某些东西,因为启动整个Rails堆栈的开销可能很大。每隔几秒运行一次它是不切实际的,因为Rails上的启动时间通常为5-15秒,具体取决于您的硬件。不过,每天这样做几

随机推荐