diff --git a/packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js b/packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js
index 9e05a96a027a63390c930d1eac2af6c34e1a04ab..4d719a64ee2afe35ca461e177d50f4e64d5a6eb6 100644
--- a/packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js
+++ b/packages/uni-template-compiler/__tests__/compiler-mp-baidu.spec.js
@@ -23,8 +23,8 @@ describe('mp:compiler-mp-baidu', () => {
})
it('generate v-for directive', () => {
assertCodegen(
- '',
- ''
+ '',
+ ''
)
})
it('generate scoped slot', () => {
@@ -125,15 +125,15 @@ describe('mp:compiler-mp-baidu', () => {
)
assertCodegen(
'',
- ''
+ ''
)
assertCodegen(
'',
- ''
+ ''
)
assertCodegen(
'',
- ''
+ ''
)
})
diff --git a/packages/uni-template-compiler/lib/template/traverse.js b/packages/uni-template-compiler/lib/template/traverse.js
index 7303c990cc2312f033ca7f07da18310ce9088715..fbe27a80601cb46f70747e610292d30f794b282a 100644
--- a/packages/uni-template-compiler/lib/template/traverse.js
+++ b/packages/uni-template-compiler/lib/template/traverse.js
@@ -428,8 +428,15 @@ function traverseRenderList (callExprNode, state) {
const prefix = state.options.platform.directive
+ const isBaidu = state.options.platform.name === 'mp-baidu'
+ let forValue = genCode(callExprNode.arguments[0], isBaidu)
+
+ if(isBaidu && forKey) {
+ forValue += ` trackBy ${getForKey(forKey, forIndex, state)}`
+ }
+
const attr = {
- [prefix + 'for']: genCode(callExprNode.arguments[0]),
+ [prefix + 'for']: forValue,
[prefix + 'for-item']: forItem
}
@@ -437,7 +444,7 @@ function traverseRenderList (callExprNode, state) {
attr[prefix + 'for-index'] = forIndex
}
- if (forKey) {
+ if (forKey && !isBaidu) {
const key = getForKey(forKey, forIndex, state)
if (key) {
attr[prefix + 'key'] = key
diff --git a/packages/uni-template-compiler/lib/util.js b/packages/uni-template-compiler/lib/util.js
index 505ed618391c6973d400fe7239ca34ab6e07e39e..99a3103c1db379a37d4a478d3a3018559eb98d6d 100644
--- a/packages/uni-template-compiler/lib/util.js
+++ b/packages/uni-template-compiler/lib/util.js
@@ -107,6 +107,7 @@ function getForKey (forKey, forIndex, state) {
if (forKey) {
if (t.isIdentifier(forKey)) {
if (forIndex !== forKey.name) { // 非 forIndex
+ if (state.options.platform.name === 'mp-baidu') return getCode(forKey)
return '*this'
} else {
// TODO
@@ -114,6 +115,7 @@ function getForKey (forKey, forIndex, state) {
return forKey.name
}
} else if (t.isMemberExpression(forKey)) {
+ if (state.options.platform.name === 'mp-baidu') return getCode(forKey)
return forKey.property.name || forKey.property.value
} else {
state.tips.add(uniI18n.__('templateCompiler.noH5KeyNoSupportExpression', { 0: getCode(forKey), 1: 'https://uniapp.dcloud.io/use?id=key' }))