Importing/exporting javascript vuejs 项目的变量
Importing/exporting javascript variables for vuejs project
这可能不是为什么有人想要 export/import 从一个 javascript 变量到另一个 javascript 的最好例子,但希望它足够好。
我有一个 javascript 文件,我在其中启动了一个变量,我们称这个变量为计数器,javascript 文件位于 CounterModel.js
中。
我还有一个 javascript 文件,它实际上对我的计数器做了一些事情,叫做 CounterController.js
.
在我的 vue 文件中,我想在 App.vue
中启动我的计数器并在 Counter.vue
中修改它。
所以我在下面进行了此设置,它给了我三个类似的警告,所以我一定是做错了什么。
所以想问一下:
这里哪里做错了?
输出
WARNING Compiled with 3 warnings 06:35:49
warning in ./src/App.vue?vue&type=script&lang=js&
"export 'default' (imported as 'counter') was not found in './api/CounterModel'
warning in ./src/components/counter/Counter.vue?vue&type=script&lang=js&
"export 'default' (imported as 'counterController') was not found in '../../api/CounterController'
warning in ./src/components/counter/Counter.vue?vue&type=script&lang=js&
"export 'default' (imported as 'counterController') was not found in '../../api/CounterController'
CounterModel.js
export let counter
async function initiateCounter () {
counter = 0
}
module.exports = {
initiateCounter
}
CounterController.js
import { counter } from './CounterModel'
async function incrementCounter () {
counter++
}
async function getCounter () {
return counter
}
module.exports = {
incrementCounter,
getCounter
}
App.vue
<template>
<div>
<router-view></router-view>
</div>
</template>
<script>
import counter from '~/api/CounterModel'
export default {
name: 'App',
async created () {
await counter.initiateCounter()
}
}
</script>
Counter.vue
<template>
<div>
<button v-on:click="incrementCounter">Add 1</button>
{{ counter }}
</div>
</template>
<script>
import counterController from '~/api/CounterController'
export default {
name: 'Counter',
data () {
return {
counter: null
}
},
methods: {
incrementCounter: async function () {
counterController.incrementCounter()
},
getCounter: async function () {
this.counter = counterController.getCounter()
}
},
async created () {
await this.getCounter()
}
}
</script>
首先,你不应该混淆 import/export 和 require/module.exports。
import/export是ES6语法,require/module.export是Commonjs语法。
- 在 App.vue 中,如果您使用
import counter from '~/api/CounterModel'
,这意味着您必须在 CounterModel.js 中将计数器导出为默认值
let counter=0;
export default counter
否则,您可以使用 import {counter} from '~/api/CounterModel'
import counterController from '~/api/CounterController'
的原因相同。如果您想在 Counter.vue
文件中使用导入,请在 CounterController.js 中使用 ES6 导出语法而不是 module.exports.
```
import { counter } from './CounterModel'
async function incrementCounter () {
counter++
}
async function getCounter () {
return counter
}
export incrementCounter;
export getCounter;
```
而且您还应该注意,您刚刚在此处导入的计数器实际上是不可编辑的。因为 ES6 将导入值视为常量。如果您尝试修改,它将得到 typeError。但是可以在CounterModel.js
中修改
我想补充一点,我遇到的最大问题是消除最后一个警告
我认为这与在 javascript 文件中导出和导入计数器有关,但实际上是关于在它发出警告的 vue 文件中导入计数器函数。
这 -> import counter from '~/api/CounterModel'
需要默认导出。
实际代码包含两个对象,一个"app.js" 和一个"counter.js",其中需要一个app 对象来修改"counter"。希望 "app" 永远不需要在它自己的文件之外进行任何修改。
所以我真正想要的是更接近于此:
app.js
export let app
async function initialiseApp () {
app = window.safe.initialiseApp()
}
export default {
initialiseApp
}
counter.js
import { app } from '~/api/safenetwork'
async function createCounter () {
counter = await app.createCounter()
}
async function incrementCounter () {
await counter.increment()
}
async function getCounter () {
return counter
}
export default {
createCounter,
incrementCounter,
getCounter
}
这可能不是为什么有人想要 export/import 从一个 javascript 变量到另一个 javascript 的最好例子,但希望它足够好。
我有一个 javascript 文件,我在其中启动了一个变量,我们称这个变量为计数器,javascript 文件位于 CounterModel.js
中。
我还有一个 javascript 文件,它实际上对我的计数器做了一些事情,叫做 CounterController.js
.
在我的 vue 文件中,我想在 App.vue
中启动我的计数器并在 Counter.vue
中修改它。
所以我在下面进行了此设置,它给了我三个类似的警告,所以我一定是做错了什么。 所以想问一下:
这里哪里做错了?
输出
WARNING Compiled with 3 warnings 06:35:49
warning in ./src/App.vue?vue&type=script&lang=js&
"export 'default' (imported as 'counter') was not found in './api/CounterModel'
warning in ./src/components/counter/Counter.vue?vue&type=script&lang=js&
"export 'default' (imported as 'counterController') was not found in '../../api/CounterController'
warning in ./src/components/counter/Counter.vue?vue&type=script&lang=js&
"export 'default' (imported as 'counterController') was not found in '../../api/CounterController'
CounterModel.js
export let counter
async function initiateCounter () {
counter = 0
}
module.exports = {
initiateCounter
}
CounterController.js
import { counter } from './CounterModel'
async function incrementCounter () {
counter++
}
async function getCounter () {
return counter
}
module.exports = {
incrementCounter,
getCounter
}
App.vue
<template>
<div>
<router-view></router-view>
</div>
</template>
<script>
import counter from '~/api/CounterModel'
export default {
name: 'App',
async created () {
await counter.initiateCounter()
}
}
</script>
Counter.vue
<template>
<div>
<button v-on:click="incrementCounter">Add 1</button>
{{ counter }}
</div>
</template>
<script>
import counterController from '~/api/CounterController'
export default {
name: 'Counter',
data () {
return {
counter: null
}
},
methods: {
incrementCounter: async function () {
counterController.incrementCounter()
},
getCounter: async function () {
this.counter = counterController.getCounter()
}
},
async created () {
await this.getCounter()
}
}
</script>
首先,你不应该混淆 import/export 和 require/module.exports。 import/export是ES6语法,require/module.export是Commonjs语法。
- 在 App.vue 中,如果您使用
import counter from '~/api/CounterModel'
,这意味着您必须在 CounterModel.js 中将计数器导出为默认值
let counter=0;
export default counter
否则,您可以使用 import {counter} from '~/api/CounterModel'
import counterController from '~/api/CounterController'
的原因相同。如果您想在Counter.vue
文件中使用导入,请在 CounterController.js 中使用 ES6 导出语法而不是 module.exports.
```
import { counter } from './CounterModel'
async function incrementCounter () {
counter++
}
async function getCounter () {
return counter
}
export incrementCounter;
export getCounter;
```
而且您还应该注意,您刚刚在此处导入的计数器实际上是不可编辑的。因为 ES6 将导入值视为常量。如果您尝试修改,它将得到 typeError。但是可以在CounterModel.js
中修改我想补充一点,我遇到的最大问题是消除最后一个警告 我认为这与在 javascript 文件中导出和导入计数器有关,但实际上是关于在它发出警告的 vue 文件中导入计数器函数。
这 -> import counter from '~/api/CounterModel'
需要默认导出。
实际代码包含两个对象,一个"app.js" 和一个"counter.js",其中需要一个app 对象来修改"counter"。希望 "app" 永远不需要在它自己的文件之外进行任何修改。
所以我真正想要的是更接近于此:
app.js
export let app
async function initialiseApp () {
app = window.safe.initialiseApp()
}
export default {
initialiseApp
}
counter.js
import { app } from '~/api/safenetwork'
async function createCounter () {
counter = await app.createCounter()
}
async function incrementCounter () {
await counter.increment()
}
async function getCounter () {
return counter
}
export default {
createCounter,
incrementCounter,
getCounter
}