如何使用字符串变量调用导入的模块';JavaScript和VueJS中的名称
我在VueJS中有一个单独的文件组件,我在其中从其他文件导入模块,如下所示:如何使用字符串变量调用导入的模块';JavaScript和VueJS中的名称,javascript,vue.js,es6-modules,Javascript,Vue.js,Es6 Modules,我在VueJS中有一个单独的文件组件,我在其中从其他文件导入模块,如下所示: <template> //Some code here that call for the function "myFunction" and pass to it an object... </template> <script> import Task from "../../APIs/Task" import
<template>
//Some code here that call for the function "myFunction" and pass to it an object...
</template>
<script>
import Task from "../../APIs/Task"
import Status from "../../APIs/Status"
export default{
data(){
//Some code here...
},
methods: {
myFunction(someObject){
<!-- This is the part that does not work. Please see the error message below. -->
[someObject.moduleNameAsStoredOnObject].someFunctionThatBothModulesHave(someObject.payload)
}
}
}
</script>
//这里的一些代码调用函数“myFunction”并向其传递一个对象。。。
从“../../API/Task”导入任务
从“../../API/Status”导入状态
导出默认值{
数据(){
//这里有一些代码。。。
},
方法:{
myFunction(someObject){
[someObject.ModuleNameStoredOnObject].SomeFunctionthatThathModulesWave(someObject.payload)
}
}
}
这是我在控制台中遇到的错误:
[Vue warn]:v-on处理程序中的错误:“TypeError:[someObject.ModuleNameStoredOnObject]。SomeFunctionThathModulesWave不是函数”
如您所见,似乎存储在someObject.ModuleNameStoredOnObject中的字符串未转换为模块名称。相反,整个表达式按原样理解。在代码的其他地方,我使用以下语法动态调用模块的函数:
ModuleName[functionNameAsString]
其思想是创建一个通用方法,该方法将模块名和有效负载作为参数,并在不同类型的对象上执行基本CRUD函数,为每种对象类型使用专用模块以分离责任
有没有人能告诉我,是否有一种方法可以在不使用switch
或if
语句的情况下,使用变量名调用模块
提前谢谢你,Lior.一目了然,括号是否应该仅围绕模块名称
someObject[ModuleNameStoredOnObject].SomeFunctionthatThathModulesWave(someObject.payload)
按照您的方式,
[someObject.ModuleNameStoreDonObject]
是一个包含模块名称的数组。因此,您试图调用数组上的某个函数,这两个函数都是。多亏了注释中的@Bergi建议,我能够使用字符串变量动态调用模块。解决方案是在我的组件数据中创建一个对象,其中其属性的名称与模块相同,其值是对模块本身的引用。请参见下面的代码示例
<template>
//Some code here that call for the function "myFunction" and pass to it an object...
</template>
<script>
import Task from "../../APIs/Task"
import Status from "../../APIs/Status"
export default{
data(){
return {
modules:{
Task: Task,
Status: Status
}
}
},
methods: {
myFunction(someObject){
!-- This works! -->
this.modules[someObject.moduleNameAsStoredOnObject].someFunctionThatBothModulesHave(someObject.payload)
}
}
}
</script>
//这里的一些代码调用函数“myFunction”并向其传递一个对象。。。
从“../../API/Task”导入任务
从“../../API/Status”导入状态
导出默认值{
数据(){
返回{
模块:{
任务:任务,
状态:状态
}
}
},
方法:{
myFunction(someObject){
!--这很有效!-->
this.modules[someObject.ModuleNameAstoreDonObject].SomeFunctionthatModulesWave(someObject.payload)
}
}
}
[someObject.ModuleNameStoredOnObject]
是一个数组文本。如果您想使用动态属性名作为对象的属性访问模块,那么需要将它们放在一个对象中。测试完成后,我会用解决方案更新我的问题。非常感谢。你可能不想编辑你的问题,而是希望我有。我对在这里发布问题有点陌生,更不用说答案了,但是谢谢你指出这个选项:)嗨,雷,谢谢你的回复!这似乎不起作用,因为ModuleNameStoreDonObject在此上下文中只是未定义。然而,@Bergi似乎有什么想法。一旦我测试完他关于在我的模块周围设置一个包装对象的建议,我将对我的问题进行编辑。