要实现的功能
实现JSON与Vue模版相互转换:
// 给定的数据源
const data = {
name: {
value: 'byoungd',
style: {
bold: true,
italic: true,
inline: false,
},
tag: 'p',
},
age: {
value: 18,
style: {
bold: false,
italic: true,
},
tag: 'h2',
},
skills: [
{
id: '0',
value: 'Vue',
style: {
bold: true,
italic: false,
},
tag: 'span',
},
{
id: '1',
value: 'React',
style: {
bold: true,
italic: false,
},
tag: 'span',
},
{
id: '2',
value: 'Rust',
style: {
bold: false,
italic: true,
},
tag: 'span',
},
],
}
// 用于拼接“样式字符串”的帮助方法
const styleHelper = (style) => {
const dict = {
bold: 'font-weight: bold;',
italic: 'font-style: italic;',
}
return Object.keys(style)
.map((key) => (style[key] ? dict[key] : ''))
.filter((str) => str)
.join(';')
}
预期的templateString如下:
const templateString = `<template>
<div>
<div>
<p :style="styleHelper(name.style)">{{ name.value }}</p>
</div>
<div>
<h2 :style="styleHelper(age.style)">{{ age.value }}</h2>
</div>
<div v-for="skill in skills" :key="skill.id">
<span :style="styleHelper(skill.style)">{{ skill.value }}</span>
</div>
</div>
</template>
`
const createTemplate = () => { /* 需要实现... */ }
// 这里的 === 仅仅用于说明 表示可以相互转换
createTemplate(data) // 执行后返回templateString
parseTemplate(templateString) // 执行后返回data
实现 createTemplate 和 parseTemplate 函数
代码示例
// createTemplate函数: 输入的模板字符串需要和createTemplate处理后生成的一致
console.log(templateString === createTemplate(data))
// 预期为 true
// parseTemplate函数: 由于对象的对比稍微复杂一些,我们暂且认为只要是值key value是正确的即可
console.log(JSON.stringify(data) === JSON.stringify(parseTemplate(templateString)))
// 预期为 true
从模板字符串转为JSON时,JSON中的数据可以从由Vue渲染后的html结果得出
最佳答案评选标准
- 限定使用
typescript
- 需要提供
codesandbox/stackblitz 在线示例
- 需要满足两者的相互转换
- 拓展性 如果data的数据更复杂一些 需要可以正常转换
- 安全性 需要处理符号转义
最佳答案
悬赏中,欢迎作答...
答题同学须知
-
答题规范:请在一次评论中完成作答,后续修改也请编辑该评论,而不是追加新的评论
-
评选标准:最佳答案由围观同学的 👍 和卡颂共同决定
-
评选时间:一般是问题发布24小时后评选,如果问题发布当天回答数较少,问题悬赏金额可能增加,同时悬赏时间也会增加
围观同学须知
要实现的功能
实现JSON与Vue模版相互转换:
预期的
templateString如下:实现
createTemplate和parseTemplate函数代码示例
从模板字符串转为
JSON时,JSON中的数据可以从由Vue渲染后的html结果得出最佳答案评选标准
typescriptcodesandbox/stackblitz在线示例最佳答案
悬赏中,欢迎作答...
答题同学须知
答题规范:请在
一次评论中完成作答,后续修改也请编辑该评论,而不是追加新的评论评选标准:最佳答案由
围观同学的 👍 和卡颂共同决定评选时间:一般是问题发布24小时后评选,如果问题发布当天回答数较少,问题悬赏金额可能增加,同时悬赏时间也会增加
围观同学须知
对于你满意的答案,请不要吝惜你的 👍,这是评选最佳答案的依据
非答题的评论会被删除,问题相关讨论请在赏金猎人群中进行