Javascript 如何将js中的字符串作为模板计算
我希望以中央控制的方式进行布线,为此我定义了一些视图,并希望将它们作为模板进行评估,格式如下:Javascript 如何将js中的字符串作为模板计算,javascript,Javascript,我希望以中央控制的方式进行布线,为此我定义了一些视图,并希望将它们作为模板进行评估,格式如下: `this is a ${variable} in the template` 这是我的密码: const Views = Object.freeze({ Home: {path:"/"}, Kind:{path:"/${kind}", values:{kind:{notNull:true}}}, SearchEntity:{path:"/${kind}/search/${
`this is a ${variable} in the template`
这是我的密码:
const Views = Object.freeze({
Home: {path:"/"},
Kind:{path:"/${kind}", values:{kind:{notNull:true}}},
SearchEntity:{path:"/${kind}/search/${name}", values:{kind:{notNull:true}, name:{}}},
Entity:{path:"/${kind}/shop/${eid}", values:{kind:{notNull:true}, eid:{notNull:true}}},
Issue:{path:"/${kind}/shop/${eid}/issue/${issueId}", values:{kind:{notNull:true}, eid:{notNull:true}, issueId:{notNull:true}}},
NewShop:{path:"/${kind}/newShop/${name}", values:{kind:{notNull:true}, name:{}}},
})
eval.call({kind:"myKind", eid:"myeid", issueId:"myIssueId"}, Views.Issue.path)
这显然不起作用,这就是为什么我要问这个问题:)
eval方法无法理解上下文:
undefined:1
/${kind}/shop/${eid}/issue/${issueId}
^
SyntaxError: Invalid regular expression flags
at Object.eval (<anonymous>)
at Object.<anonymous> (C:\Users\Zied\work\weally\src\util.js:10:6)
at Module._compile (internal/modules/cjs/loader.js:702:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
at Module.load (internal/modules/cjs/loader.js:612:32)
at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
at Function.Module._load (internal/modules/cjs/loader.js:543:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:744:10)
at startup (internal/bootstrap/node.js:240:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:564:3)
未定义:1
/${kind}/shop/${eid}/issue/${issueId}
^
SyntaxError:正则表达式标志无效
在Object.eval()处
反对。(C:\Users\Zied\work\weally\src\util.js:10:6)
at模块编译(内部/modules/cjs/loader.js:702:30)
at Object.Module._extensions..js(internal/modules/cjs/loader.js:713:10)
at Module.load(内部/modules/cjs/loader.js:612:32)
在tryModuleLoad(内部/modules/cjs/loader.js:551:12)
at Function.Module._load(内部/modules/cjs/loader.js:543:3)
位于Function.Module.runMain(内部/modules/cjs/loader.js:744:10)
启动时(内部/bootstrap/node.js:240:19)
在bootstrapNodeJSCore(internal/bootstrap/node.js:564:3)
当然,我可以有函数而不是模板来解决这个问题,但是我希望有一个更干净的代码,并且我希望以集中的方式在中间插入更多的控件(如NoTalk验证检查等)。因此,我希望将声明与执行分开不需要
eval
-将path
属性改为返回模板文本的函数,并调用该函数:
const view=Object.freeze({
问题:{
路径:({kind,eid,issueId})=>`/${kind}/shop/${eid}/issue/${issueId}`,
价值观:{
种类:{
notNull:真
},
eid:{
notNull:真
},
问题ID:{
notNull:真
}
}
},
});
console.log(Views.Issue.path({
种类:“我的种类”,
eid:“myeid”,
issueId:“myIssueId”
}));代码>当然,我可以有函数而不是模板来解决这个问题,但是我希望有一个更干净的代码,并且我希望以集中的方式在中间插入更多的控件(如NoNoLoT检查等)。因此,我希望将声明保留在Excel Suth@ CertainPerformance之外,谢谢您的回答,但正如我刚才所说的(我希望这种类型的答案):自然地,我可以有函数而不是模板来解决这个问题,但是我希望有一个更干净的代码,我想用更多的控件来干预中间。(如notNull检查等)以集中的方式。所以我希望声明与执行分开,正如您可能已经注意到的,在执行模板之前必须处理notNull元数据,集中的行为会带来其他约束GREAT ANKS!所以如果我理解得很好,没有简单的js方法可以做到这一点?它需要一个regexp工作围绕“简单的方法做”就是使用这个函数,但如果不是这样,你就必须编写一些更复杂的代码来手动替换。我暂时不会将答案标记为正确,只是为了让那些有更多“本地”解决方案的人回答。如果没有人回答,我会假设没有直接的js解决方案来满足这一需求,我会将你的答案标记为正确答案1