Javascript 在Vue实例方法中使用全局模块对象
我正在尝试创建一个可以在Vue中使用的全局对象,但在访问这些方法时遇到问题。我想在不同的组件中使用这些方法。还有,最好的方法是什么。我听说过使用mixin,但我正在考虑尝试一个基本的javascript对象。我希望我问这个问题的方式是正确的 src/myobject.jsJavascript 在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
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>