微信小程式專案總結:for迴圈,繫結點選事件,二維陣列列表渲染
阿新 • • 發佈:2019-01-09
一:for迴圈,繫結點選事件
分享者:niedongdong,原文地址
最近公司有小程式的專案,本人有幸參與其中,一個專案做下來感覺受益匪淺,與大家做下分享,歡迎溝通交流互相學習。
先說一下此次專案本人體會較深的幾個關鍵點:微信地圖、使用者靜默授權、使用者彈窗授權、微信充值等等。
言歸正傳,今天分享我遇到的關於wx:for迴圈繫結資料的一個tips:
想必大家的都知道wx:for,如下就不用我囉嗦了:
<viewclass="myNew"wx:for="{{list}}">{{item.title}}<view>{{item.content}}</view></view>
但是,如果迴圈體內繫結一個點選事件,點選時如何把子元素的內容傳進來呢? 如下:
list:[
{"id":01,
"title":"第一個標題",
"content":"第一個內容"},
{"id":02,
"title":"第二個標題",
"content":"第二個內容"},
{"id":03,
"title":"第三個標題",
"content":"第三個內容"}
]
上面的例子變成如下:
<viewclass="myNew"wx:for="{{list}}">{{item.title}}<viewbindtap="readDetail">{{item.content}}
需要觸發readDetail事件時,取到對應的id調介面檢視詳情。
可是小程式又不允許事件名後直接注入id引數。
其實,小程式早就想到這一點了,提供了一個 data-any (any任意型別) 方法,此處有借鑑H5中 data- 任意屬性的妙處。
(小程式給出了示例: data-index,大家可以自行研究。)
可以寫成如下:
<viewclass="myNew"wx:for="{{list}}">{{item.title}}<viewbindtap="readDetail"data-id="{{item.id}}">{{item.content}}
js檔案:
readArticle:function(e){
var $id = e.currentTarget.dataset.id;//列印可以看到,此處已獲取到了對應的id
})
同理:也可以寫成如下:
<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中:
readArticle:function(e){
var $data = e.currentTarget.dataset;//列印可以看到,此處已獲取到了包含id、title、和content的物件
wx.navigateTo({
url:'../myNewsInfo/myNewsInfo?id'+$data.id+"&title="+$data.title+"&content="+$data.content //傳參跳轉即可
})
})
二:一些開發小程式時,遇到的問題
分享者: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}}"
三:二維陣列列表渲染
Page({ mapData:[[{id:11},{id:12}],[{id:21},{id:22}],[{id:31},{id:32},{id:33}]]})
<viewclass="container"><viewclass="map"><viewwx:for="{{mapData}}"><viewwx:for="{{item}}"> {{item.id}} </view></view></view></view>