From fe1c7fc60d69c22b019a25c14462b3faa81583f6 Mon Sep 17 00:00:00 2001 From: JiM-W <550116990@qq.com> Date: Thu, 21 Feb 2019 17:14:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=94=AF=E4=BB=98=E5=AE=9D,?= =?UTF-8?q?=E7=99=BE=E5=BA=A6=20component=20is=20=E7=9A=84=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/parser/parse-vue2wx.js | 16 ++++++--- .../chameleon-template-parse/test/index.js | 36 +++++-------------- 2 files changed, 19 insertions(+), 33 deletions(-) diff --git a/packages/chameleon-template-parse/src/parser/parse-vue2wx.js b/packages/chameleon-template-parse/src/parser/parse-vue2wx.js index 824b9a8f..36b8ec6a 100644 --- a/packages/chameleon-template-parse/src/parser/parse-vue2wx.js +++ b/packages/chameleon-template-parse/src/parser/parse-vue2wx.js @@ -84,15 +84,21 @@ parseVue2Wx.tap('vue2wx-v-for', (args) => { parseVue2Wx.tap('component-is', (args) => { let {path, node, type, options} = args; let lang = options.lang; + let conditionMap = { + wx: 'wx:if', + alipay: 'a:if', + baidu: 's-if' + + } let usingComponents = (options.usingComponents || []).map(item => item.tagName) - if (type === 'wx' && t.isJSXElement(node)) { + if ((type === 'wx' || type === 'alipay' || type === 'baidu') && t.isJSXElement(node)) { let currentTag = node.openingElement.name.name; let jsxElementChildren = node.children || []; if (currentTag === 'component') { let attributes = utils.getJSXElementAttrKeyValue(path); - let shrinkComponents = attributes.shrinkComponents; - if (shrinkComponents) { - usingComponents = shrinkComponents.split(',').reduce((result, comp) => { + let shrinkcomponents = attributes.shrinkcomponents; + if (shrinkcomponents) { + usingComponents = shrinkcomponents.split(',').reduce((result, comp) => { comp = utils.trim(comp); if (comp) { result.push(comp); @@ -114,7 +120,7 @@ parseVue2Wx.tap('component-is', (args) => { if (currentComp && usingComponents) { let elementAttributes = path.node.openingElement.attributes || [] usingComponents.forEach((comp) => { - let openTag = t.jsxOpeningElement(t.jsxIdentifier(comp), [t.jsxAttribute(t.jsxIdentifier('wx:if'), t.stringLiteral(`{{${currentComp} === '${comp}'}}`))].concat(elementAttributes)); + let openTag = t.jsxOpeningElement(t.jsxIdentifier(comp), [t.jsxAttribute(t.jsxIdentifier(`${conditionMap[type]}`), t.stringLiteral(`{{${currentComp} === '${comp}'}}`))].concat(elementAttributes)); let closeTag = t.jsxClosingElement(t.jsxIdentifier(comp)) let insertNode = t.jsxElement(openTag, closeTag, jsxElementChildren, false); diff --git a/packages/chameleon-template-parse/test/index.js b/packages/chameleon-template-parse/test/index.js index 224ca226..7ba2ea0c 100644 --- a/packages/chameleon-template-parse/test/index.js +++ b/packages/chameleon-template-parse/test/index.js @@ -1,33 +1,13 @@ const compileTemplate = require('../src/index.js'); -const source = ` - cpxtest -cpx -change-component-vue -change-component - - - - - {{5 > 6?'5>6' : '5 < 6'}} - c-if - c-else-if - c-else - - - computedStyle - v-model的使用 - - {{modelValueTest}} - - - 组件使其改变{{modelValueTest2}} - -` +const source = ` +static style + +ccc` // fafafa // fafafa // // let result = compileTemplate(source,'web'); -let options = {lang: 'vue', +let options = {lang: 'cml', filePath: '/Users/didi/components.cml', buildInComponents: {button: "cml-buildin-button"}, cmss: { @@ -56,12 +36,12 @@ let options = {lang: 'vue', }] }; console.log('before-compile', source); -// let result_web = compileTemplate(source, 'web', options); +let result_web = compileTemplate(source, 'web', options); let result_wx = compileTemplate(source, 'wx', options); // let result_baidu = compileTemplate(source, 'wx', options); // let result_alipay = compileTemplate(source, 'alipay', options); // let result_alipay = compileTemplate(source,'alipay',{lang:'cml'}); -// console.log('result_web', result_web) -// console.log('result_wx', result_wx) +console.log('result_web', result_web) +console.log('result_wx', result_wx) // console.log('result_alipay', result_alipay) // console.log('result_baidu', result_baidu) -- GitLab