1. 程式人生 > >微信小程式專案總結:for迴圈,繫結點選事件,二維陣列列表渲染

微信小程式專案總結:for迴圈,繫結點選事件,二維陣列列表渲染

一:for迴圈,繫結點選事件

分享者:niedongdong,原文地址 
最近公司有小程式的專案,本人有幸參與其中,一個專案做下來感覺受益匪淺,與大家做下分享,歡迎溝通交流互相學習。

先說一下此次專案本人體會較深的幾個關鍵點:微信地圖、使用者靜默授權、使用者彈窗授權、微信充值等等。

言歸正傳,今天分享我遇到的關於wx:for迴圈繫結資料的一個tips:

想必大家的都知道wx:for,如下就不用我囉嗦了:

  1. <viewclass="myNew"wx:for="{{list}}">{{item.title}}<view>{{item.content}}</view></view>
    (item即為陣列list的每一個子元素)

但是,如果迴圈體內繫結一個點選事件,點選時如何把子元素的內容傳進來呢? 如下:

  1. list:[
  2. {"id":01,
  3. "title":"第一個標題",
  4. "content":"第一個內容"},
  5. {"id":02,
  6. "title":"第二個標題",
  7. "content":"第二個內容"},
  8. {"id":03,
  9. "title":"第三個標題",
  10. "content":"第三個內容"}
  11. ]

上面的例子變成如下:

  1. <viewclass="myNew"wx:for="{{list}}">{{item.title}}<viewbindtap="readDetail">{{item.content}}
    </view></view>

需要觸發readDetail事件時,取到對應的id調介面檢視詳情。

可是小程式又不允許事件名後直接注入id引數。

其實,小程式早就想到這一點了,提供了一個 data-any (any任意型別) 方法,此處有借鑑H5中 data- 任意屬性的妙處。

(小程式給出了示例: data-index,大家可以自行研究。)

可以寫成如下:

  1. <viewclass="myNew"wx:for="{{list}}">{{item.title}}<viewbindtap="readDetail"data-id="{{item.id}}">{{item.content}}
    </view></view>

js檔案:

  1. readArticle:function(e){
  2. var $id = e.currentTarget.dataset.id;//列印可以看到,此處已獲取到了對應的id
  3. })

同理:也可以寫成如下:

  1. <viewclass="myNew"wx:for="{{list}}">{{item.title}}<viewbindtap="readDetail"data-id="{{item.id}}"data-title="{{item.title}}"data-content="{{item.content}}">{{item.content}}</view></view>

js中:

  1. readArticle:function(e){
  2. var $data = e.currentTarget.dataset;//列印可以看到,此處已獲取到了包含id、title、和content的物件
  3. wx.navigateTo({
  4. url:'../myNewsInfo/myNewsInfo?id'+$data.id+"&title="+$data.title+"&content="+$data.content //傳參跳轉即可
  5. })
  6. })

二:一些開發小程式時,遇到的問題

分享者:Mr.方,原文地址 
1、JS不能操作css,那麼怎麼動態新增css呢?

答:通過操作item?的true或false,來加入class 例如:

2、微信的尺寸rpx?

答:以設計稿750px為準,在設計稿上量出多少,就是多少,微信會自動給你適配

3、微信小程式api裡沒有modal?

4、小程式中的scroll-view元件不能和textarea一起用,自己寫的類似scroll-view元件(overflow-y:auto)也不能一起使用,使用的話,textarea的提示文字和游標會飄,根本無法使用。另外textarea,也不能display:none,最好的方法是

用條件判斷去控制它wx:if="{{show}}"

三:二維陣列列表渲染

  1. Page({ mapData:[[{id:11},{id:12}],[{id:21},{id:22}],[{id:31},{id:32},{id:33}]]})
  1. <viewclass="container"><viewclass="map"><viewwx:for="{{mapData}}"><viewwx:for="{{item}}"> {{item.id}} </view></view></view></view>