Vue官网提到:模板表达式都被放在沙盒中,你不应该在模板表达式中试图访问用户定义的全局变量?

作者站长头像
站长
· 阅读数 8

有2个问题不太理解:

(1)模板表达式为何要放在沙盒中,且不能访问用户定义的全局变量?我知道沙盒的目的是提供安全性,但是在模板中使用用户定义的全局变量也不会带来什么危害吧。难道自己坑自己?

(2)除了模板,Vue中的其它部分不需要放到沙盒中?

回复
1个回答
avatar
test
2024-07-02

answer image

模板中的表达式将被沙盒化指的是模板中的内容将被封装成一个函数运行,模板中的内容会被替换为函数返回值

vue中template的内容会使用with改变作用域"with(this){return " + code + "}",所以使用this中没有定义的变量是会报错的,如果你想使用那么需要把它注册到全局,比如location,vue2写法是Vue.prototype.location = location,vue3是app.config.globalProperties.location = location,而vue中已经给你内置了一些全局变量,这些你是可以直接拿来使用的vue2answer imagevue3answer image

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容