24 lines
805 B
JavaScript
24 lines
805 B
JavaScript
|
|
/**
|
|||
|
|
* 微信小程序 v-for :key 仅支持简单属性访问,不支持模板表达式。
|
|||
|
|
* 在 JS 中为列表项预生成 _wxKey 后,模板使用 :key="item._wxKey"
|
|||
|
|
*/
|
|||
|
|
export function withWxKey(list, idField = 'id', fallbackPrefix = 'i') {
|
|||
|
|
return (list || []).map((item, index) => ({
|
|||
|
|
...item,
|
|||
|
|
_wxKey: item[idField] != null && item[idField] !== ''
|
|||
|
|
? String(item[idField])
|
|||
|
|
: `${fallbackPrefix}${index}`,
|
|||
|
|
}))
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/** 单条消息/列表项补全 _wxKey(用于 push、$set 等增量更新) */
|
|||
|
|
export function ensureWxKey(item, idField = 'id', fallback) {
|
|||
|
|
if (!item || typeof item !== 'object') return item
|
|||
|
|
if (item._wxKey != null && item._wxKey !== '') return item
|
|||
|
|
const id = item[idField]
|
|||
|
|
return {
|
|||
|
|
...item,
|
|||
|
|
_wxKey: id != null && id !== '' ? String(id) : String(fallback),
|
|||
|
|
}
|
|||
|
|
}
|