微信小程序(三):使用template模板时无法获取for循环下标index的问题

使用template模板渲染的数据列表,点击后跳转到详情页,本想通过for循环中的index对应点击的是哪一条数据,后来发现template模板中无法获取index。

问题重现:【接微信小程序(二)的示例继续写】

运行结果:

 

后来查阅资料发现template中无法获取下标index,那如何获取呢?

方法一:for循环的下标index不能直接在template中获取,需要通过template的data属性传入template。这里只能以data="{{item:item,index:index}}"的格式,我试过data="{{...item,...index}}"和data="{{...item,index:index}}"都行不通。

 运行结果:能成功获取index

方法二:在js中手动为每条数据添加一个index

 

运行结果:也能成功获取

方法二的完整代码:

templateStudy.wxml

<import src="../student-item/student-item-template.wxml" />

<view class='container'>
  <block wx:for="{{studentsList}}" wx:for-item="item" wx:for-index="index">
    <view class='list' catchtap="onStudentTap" data-studentId="{{item.studentId}}">
      <template is='studentTemplate' data="{{...item}}" />
    </view>
  </block>
</view>

templateStudy.wxss

@import "../student-item/student-item-template.wxss";

page{
  background-color: #f0f0f0;
}

.container{
  margin: 20rpx;
}

templateStudy.js

var postsData = require('../../../data/students.js')

Page({

  /**
   * 页面的初始数据
   */
  data: {
    
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    for (var idx in postsData.studentsList) {
      postsData.studentsList[idx].studentId = idx;
    }
    this.setData({
      studentsList: postsData.studentsList
    });
    console.log(this.data.studentsList);
  },

  onStudentTap: function (event){
    var idx = event.currentTarget.dataset.studentid;
    console.log(idx);
    wx.navigateTo({
      url: "../studentDetail/studentDetail?id=" + idx
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
    
  }
})

student-item-template.wxml

<template name='studentTemplate'>
  <view class='list-item'>
      <view class='title'>
        <label class='username'>{{username}}</label>
      </view>
      <view class='info'>
          <label class='classes'>{{classname}}</label>
          <label class='Sno'>学号:{{Sno}}</label>
      </view>
  </view>
</template>

student-item-template.wxss

.list-item{
  background-color: white;
  border-radius: 10rpx;
}

.title{
  margin: 20rpx;
  line-height: 80rpx;
  flex-direction: row;
  display: flex;
  border-bottom: 1rpx solid #f0f0f0;
}

.num{
  position: absolute;
  right: 50rpx;
}

.info{
  margin: 20rpx;
  flex-direction: row;
  display: flex;
  line-height: 60rpx;
  font-size: 34rpx;
}

.Sno{
  position: absolute;
  right: 50rpx;
}

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
微信小程序的wx:for循环中,如果需要获取同一个索引的多个输入框的值,可以使用数据绑定和事件处理函数相结合的方式来实现。 具体做法是,在每个输入框上设置一个data-index属性,并将其值设置为当前循环的索引值index。然后,在输入框的input事件处理函数中,通过event.target.dataset.index获取到当前输入框的索引值,并将输入框的值存储到对应的数组中。 例如,假设有一个数组列表dataList需要渲染,每个列表项都包含两个输入框,需要获取每个输入框的值: ``` <view wx:for="{{dataList}}" wx:key="{{index}}"> <view class="list-item"> <input type="text" data-index="{{index}}" bindinput="onInput1" /> <input type="text" data-index="{{index}}" bindinput="onInput2" /> </view> </view> ``` 在这个例子中,我们在每个输入框上绑定了data-index属性,并将其值设置为当前循环的索引值index。然后,在onInput1和onInput2事件处理函数中,我们可以通过event.target.dataset.index获取到当前输入框的索引值,并将输入框的值存储到对应的数组inputValue1和inputValue2中。 ``` Page({ data: { dataList: [], inputValue1: [], inputValue2: [] }, onInput1: function(event) { var index = event.target.dataset.index; var value = event.detail.value; this.data.inputValue1[index] = value; }, onInput2: function(event) { var index = event.target.dataset.index; var value = event.detail.value; this.data.inputValue2[index] = value; } }) ``` 需要注意的是,在使用数据绑定和事件处理函数的方式,需要确保数组inputValue1和inputValue2的长度与dataList的长度相同,否则可能会出现数组越界等问题
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值