Vue.js 获取的v-html内容中的数据绑定

Vue.js 获取的v-html内容中的数据绑定,vue.js,Vue.js,我正在从我们的服务器获取一个字符串模板(不是Vue模板,是具有html属性的简单字符串),它看起来像Hi{{{name}(…),并将其放入: data: { return: { template: '', // after template is fetched it goes here name: 'John' } } 但是我得到的不是Hi John,而是Hi{{name}。不确定如何解决-有什么简单的解决方案吗?如果模板字符串不是Vue模板,那么您可以自己使用Reg

我正在从我们的服务器获取一个字符串模板(不是Vue模板,是具有html属性的简单字符串),它看起来像
Hi{{{name}(…)
,并将其放入:

data: {
  return: {
    template: '', // after template is fetched it goes here
    name: 'John'
  }
}

但是我得到的不是
Hi John
,而是
Hi{{name}
。不确定如何解决-有什么简单的解决方案吗?

如果模板字符串不是Vue模板,那么您可以自己使用RegExp解析
{{…}
占位符

newvue({
el:“#应用程序”,
数据(){
返回{
名字:“约翰”,
姓氏:“史密斯”,
标题:'先生',
模板:'Hi{{title}}{{firstName}}{{lastName}}'
}
},
计算:{
模板输出(){
返回此.template.replace(/{{\s*([\s]+?)\s*}}/g,(完整,属性)=>{
返回转义(此[属性])
})
函数转义(str){
如果(str==null){
返回“”
}
返回字符串(str)
.更换(/&/g,“&;”)
.替换(/>/g'')

.replace(/你有包含的吗?是的,我使用webpack-我从来没有真正使用过
render()
functionwebpack仅用于构建,如果你在运行时获取“模板”,你将在运行时需要编译器;如果你以编程方式构建模板(
h()
),你可以省略编译器,但因为你明确提到
{}
我假设您希望在运行时通过编译器编译模板,这意味着-而不是在我错误解释的网页时间。在本例中,模板指的是从服务器获取的html字符串(与示例中的相同)这个字符串是通过
v-html
解析的。问题是胡须插值没有绑定,只是按原样解析。如果我这样解释的话,也许我会有所帮助:在webpack之后,没有模板,只有呈现函数(webpack/vue cli预编译)。现在您想从(服务器端获取的)运行时模板。您可以使用vue编译器或其他方法将字符串转换为函数来编译它。什么
escape()
函数用于?@jeand'arme,它确保将这些特殊字符作为纯文本处理,而不是将它们解释为HTML。这既确保了正确性,又提供了防止XSS注入的保护。从这个角度来看,您需要注意确保模板本身同样安全。如果您的模板不包含任何HTML,那么您最好避免使用
v-HTML
,在这种情况下,不再需要转义。很好!我实际上只从服务器获取HTML模板,但只发送普通数据,因为模板是事务性电子邮件模板。感谢您的解释和解决方案!