Vue.js 获取的v-html内容中的数据绑定
我正在从我们的服务器获取一个字符串模板(不是Vue模板,是具有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
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模板,但只发送普通数据,因为模板是事务性电子邮件模板。感谢您的解释和解决方案!