Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用字符串变量调用导入的模块';JavaScript和VueJS中的名称_Javascript_Vue.js_Es6 Modules - Fatal编程技术网

如何使用字符串变量调用导入的模块';JavaScript和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

我在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 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似乎有什么想法。一旦我测试完他关于在我的模块周围设置一个包装对象的建议,我将对我的问题进行编辑。