变量在template里不好使,在setup好使?
问题:
自定义的一个函数 ,import导入后 setup里面使用正常 ,在template里面说未定义
作用域问题
在 Vue 的模板语法中,模板(template
)里能直接访问的是组件实例上暴露的属性和方法。从代码看,timestampToTime
只是在 script
部分导入,没有将其添加到组件实例可访问的范围内,所以模板无法识别它。虽然在 setup
内可正常使用,是因为在 setup
函数作用域内,导入的模块处于当前作用域下可直接调用,但这并不意味着模板也能直接用
timestamptotime是在import里面的不是在setup里面的 为什么需要导出?
js作用域机制
在 JavaScript 中,函数能够访问其外部作用域里的变量和导入的模块,这是因为函数存在闭包特性。闭包允许函数记住并访问其被创建时的词法环境。当在 setup
函数外部使用 import
导入模块时,这个模块就处于当前文件的全局作用域里,而 setup
函数作为在这个文件里定义的函数,自然可以访问该全局作用域中的模块
在 Vue 3 组件里,import
语句导入的模块处于文件的全局作用域,setup
函数能够访问这个全局作用域,所以可以直接调用导入的模块。
闭包:当一个函数内部定义的函数引用了外部函数的变量时,就形成了闭包。闭包会记住它创建时所处的词法环境,即使外部函数执行完毕,其作用域内的变量也不会被销毁,而是会被闭包所引用和保留。
Vue 3 组件执行流程
在 Vue 3 里,setup
函数是组件的一个关键部分,用于初始化组件的响应式数据、方法等。当组件被创建时,setup
函数会被执行,在执行过程中,它可以访问当前文件全局作用域里的所有内容,包含在文件顶部使用 import
导入的模块。(因为 setup
函数在执行时,其作用域包含了文件的全局作用域)(setup
函数记住了它创建时所处的词法环境(即当前文件的全局作用域))
vue渲染机制
template渲染依赖于setup提供的数据和方法上下文。vue在处理组件渲染时,会根据setup返回的内容构建响应式数据和可调用方法的集合,template中的表达式和指令基于这个集合进行求值和操作
加{}和不加{}导入区别?
这种导入方式属于默认导入(Default Import)。它适用于模块使用 export default 语法导出的情况。在 ../../hooks/timestampToTime 这个模块中,如果使用了 export default 来导出一个函数那么你就可以使用这种方式将其导入,并且可以为导入的内容自定义一个名称,例如这里的timestampToTime。
例如
这种导入方式属于命名导入。它适用于模块使用 export 语法导出多个命名的变量、函数等内容的情况。当模块中使用 export 关键字导出多个内容时,你可以使用花括号 {} 来指定要导入的具体内容。
加了 { } 不好使原因?
因为 ../../hooks/timestampToTime,模块使用的是 export default 语法来导出,timestampToTime 函数,而不是使用 export 来导出