Vue.js:使用函数导入类并在子组件中调用它

我有一个组件 my-parent.在这个组件中,我使用一个子组件 my-child 并导入一个外部类 MyClass 和一个自己的函数 exportedFunction.我尝试使用此解决方案:VueJS 在 vue 组件中访问外部导入的方法

I have a component my-parent. In this component, I use a child component my-child and import an external class MyClass with an own function exportedFunction. I tried to use this solution: VueJS accessing externaly imported method in vue component

基本上,我使用 mounted 和导入类中的函数名称.在 methods 中,我定义了一个新方法,它从导入的类中调用挂载的方法.比我将创建的方法作为属性传递给我的孩子,在那里我尝试使用 @click 调用该函数并将参数传递给那里.

Basiclly, I use mounted and the name of the function from the imported class. In methods I defined a new method, which calls the mounted one from the imported class. Than I pass the created method as property to my child, where I try to call the function with a @click and pass the parameter there.

到目前为止,这是我的代码:

Here is my code so far:

我的父母模板:

<template>
    <my-child :exportedFunction="callFunction"></my-child>
</template>

<script>
import MyClass from './MyClass';

export default {
    mounted() {
        exportedFunction()
    },
    methods: {
        callFunction() {
            exportedFunction()
        }
    }
}
</script>

我的孩子模板:

<template>
    <button @click="exportedFunction('hello world!')">Click me!</button>
</template>

<script>
export default {
    props: ['exportedFunction']
}
</script>

MyClass 代码:

export default class MyClass {
    exportedClass(parameter) {
        console.log(parameter) // expected 'hello world' from child
    }
}

希望得到一些帮助!

推荐答案

我会放弃你的 MyClass 组件,而是拥有:

I would ditch your MyClass component and instead have:

我的父母

<template>
    <my-child :triggerEvent="callFunction"></my-child>
</template>

<script>
export default {
    methods: {
        callFunction() {
          console.log('hello');
        }
    }
}
</script>

我的孩子

<template>
    <button @click="$emit('triggerEvent')">Click me!</button>
</template>

当您想在示例中使用 MyClass 时,您可以保持原样并将 my-parent 设置为:

As you want to use MyClass in your example you can keep it as is and have my-parent as:

<template>
  <my-child :triggerEvent="callFunction"/>
</template>

<script>
import MyChild from "./MyChild";
import MyClass from "./MyClass.js";

export default {
  components: {
    MyChild
  },
  data() {
    return {
      myCls: new MyClass()
    };
  },
  mounted() {
    this.myCls.exportedClass("hello my class");
  },
  methods: {
    callFunction() {
      console.log("hello");
    }
  }
};
</script>

相关文章