Javascript 在Vue实例方法中使用全局模块对象

Javascript 在Vue实例方法中使用全局模块对象,javascript,vue.js,Javascript,Vue.js,我正在尝试创建一个可以在Vue中使用的全局对象,但在访问这些方法时遇到问题。我想在不同的组件中使用这些方法。还有,最好的方法是什么。我听说过使用mixin,但我正在考虑尝试一个基本的javascript对象。我希望我问这个问题的方式是正确的 src/myobject.js exports.myObj = () => { function testMethod() { console.log('working'); } } src/main.js import Vue fr

我正在尝试创建一个可以在Vue中使用的全局对象,但在访问这些方法时遇到问题。我想在不同的组件中使用这些方法。还有,最好的方法是什么。我听说过使用mixin,但我正在考虑尝试一个基本的javascript对象。我希望我问这个问题的方式是正确的

src/myobject.js

 exports.myObj = () => {
  function testMethod() {
   console.log('working');
  }
}
src/main.js

import Vue from 'vue'
import App from './App'
import { store } from './store/store'
import { myObj } from './myobject'

Vue.config.productionTip = false

myObj.testMethod() // NOT WORKING - TypeError: __WEBPACK_IMPORTED_MODULE_3_

/* eslint-disable no-new */
new Vue({
  el: '#app',
  store: store,
  components: { App },
  template: '<App/>'
})
从“Vue”导入Vue
从“./App”导入应用程序
从“./store/store”导入{store}
从“/myobject”导入{myObj}
Vue.config.productionTip=false
myObj.testMethod()//不工作-类型错误:\u网页包\u导入的模块\u 3_
/*eslint禁用无新*/
新Vue({
el:“#应用程序”,
店:店,,
组件:{App},
模板:“”
})
src/components/App.vue

<template>
  <div id="app">
    <img src="./assets/logo.png">
  </div>
</template>

<script>

export default {
  name: 'App',
  mounted: function () {
      myObj.testMethod() // NOT WORKING
  },
  components: {
  }
}
</script>

<style>
body {
  margin: 0;
}
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  color: #2c3e50;
}
</style>

导出默认值{
名称:“应用程序”,
挂载:函数(){
myObj.testMethod()//不工作
},
组成部分:{
}
}
身体{
保证金:0;
}
#应用程序{
字体系列:“Avenir”、Helvetica、Arial、无衬线字体;
-webkit字体平滑:抗锯齿;
-moz osx字体平滑:灰度;
颜色:#2c3e50;
}

要创建一个简单的ES模块来导出命名函数和默认对象,您可以这样定义它:

export function testMethod() {
  console.log('working');
}

export function otherMethod() {
  console.log('other method');
}

// optionally export a default object
export default { 
  testMethod,
  otherMethod
}
然后,可以导入它:

import { testMethod } from './myobject';
// or import the default export
import myObj from './myobject';
myObj.testMethod();
现在,有多种方法,我已经在另一个答案中解释过了。使用是一种方法(注意全局混合),也是另一种方法

在您的情况下,它可以是一个简单的混合:

// my-mixin.js
import { testMethod } from './myobject';

export default {
  mounted() {
    testMethod();
  }
}
具有相同名称的钩子函数合并到一个数组中,以便调用所有这些函数


//组件/App.vue
从“../my mixin”导入MyMixin
导出默认值{
名称:“应用程序”,
mixin:[MyMixin],
安装的(){
log('将调用此函数和mixin函数');
},
组成部分:{
}
}


代码无法工作的原因是您正在导出一个什么都不做的函数
testMethod
没有公开,它只是在导出的函数中声明为本地函数。

myobject.js
是一个函数,它在其主体中声明了一个函数,而该函数不会返回。你将无法导入它。我已经复制了该代码,并在网上进行了一些研究。你知道什么是最好的方法吗?我写了一个答案,展示了如何导出命名导出和默认导出。它现在可以工作了!我有一个关于用这种方式和用混音器做比较的问题?@如果其他人看到我的另一个。希望最后一个问题。如何使用我可以调用的多个方法导出对象?我想使用var myObj={methodOne:function(){//Do this},methodTwo:function(){//Do this}之类的方法,并像myObj.methodOne那样调用它
<script>
// components/App.vue
import MyMixin from '../my-mixin'

export default {
  name: 'App',
  mixins: [MyMixin],
  mounted() {
    console.log('both this function and the mixin one will be called');
  },
  components: {
  }
}
</script>