微信小程序給template的data屬性傳入多個數據

1、發現問題

有時候在使用template模板時又使用了列表渲染,而後又想把 index值和數據一同傳入 data
<!-- test/test-template/test-template.wxml -->
<template name="stdInfo">
  <view>
    <!-- 這裏用到了index -->
    <text>{{index + 1}} </text>
    <text>{{title}}</text>
    <text> {{name}}</text>
  </view>
</template>
<!--pages/test/test.wxml-->
<import src="./test-template/test-template.wxml" />
<view>
  <template is="stdInfo" wx:for="{{stdInfo}}" data="{{...stdInfo[index]}}"></template>
</view>
// pages/test/test.js
Page({
  data: {
    stdInfo: [
      {
        name: "lostexin",
        age: 21,
        gender: "m",
        title: "老子是魔法少女"
      },
      {
        name: "afei",
        age: 21,
        gender: "m",
        title: "邪王真眼"
      }
    ]
  }
})
想要 index從外部傳入,而不想寫在js文件的 data中(即從後端獲取過來,填充到 data裏)

2、解決問題

首先說明一下擴展運算符,它是ES6的語法,它的做用是「 將一個數組轉爲用逗號分隔的參數序列
console.log(...[1, 2, 3])
// 1 2 3

console.log(1, ...[2, 3, 4], 5)
// 1 2 3 4 5

[...document.querySelectorAll('div')]
// [<div>, <div>, <div>]

注: ES2018將這個運算符引入了對象,因此也能夠對對象這麼整,參考:阮一峯老師《ES6入門》數組擴展和對象擴展章節es6

改寫代碼,以下
<!--pages/test/test.wxml-->
<import src="./test-template/test-template.wxml" />
<view>
  // 注意最後兩個花括號和前面的花括號要隔開,否則會報錯
  <template is="stdInfo" wx:for="{{stdInfo}}" data="{{...stdInfo[index], ...{index: index, name: item.name} }}"></template>
</view>
最後輸出結果

圖片描述

相關文章
相關標籤/搜索