ฉันมี 2 โครงการ Vue ที่มีจำนวนมาก (50+) ส่วนประกอบไฟล์เดียว ฉันใช้ Vue-Router สำหรับการกำหนดเส้นทางและ Vuex สำหรับสถานะ
มีไฟล์ที่เรียกว่าhelpers.jsซึ่งมีฟังก์ชันวัตถุประสงค์ทั่วไปมากมายเช่นการใช้อักษรตัวแรกของสตริงเป็นตัวพิมพ์ใหญ่ ไฟล์นี้มีลักษณะดังนี้:
export default {
capitalizeFirstLetter(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
}
ไฟล์main.jsของฉันเริ่มต้นแอป:
import Vue from 'vue'
import VueResource from "vue-resource"
import store from "./store"
import Router from "./router"
import App from "./components/App.vue"
Vue.use(VueResource)
const app = new Vue({
router: Router,
store,
template: '<app></app>',
components: { App }
}).$mount('#app')
ไฟล์App.vueของฉันมีเทมเพลต:
<template>
<navbar></navbar>
<div class="container">
<router-view></router-view>
</div>
</template>
<script>
export default {
data() {
return {
//stuff
}
}
}
</script>
จากนั้นฉันมีส่วนประกอบไฟล์เดียวจำนวนมากซึ่ง Vue-Router จะจัดการกับการนำทางไปยังภายใน<router-view>
แท็กในเทมเพลต App.vue
ตอนนี้ขอบอกว่าผมจำเป็นต้องใช้capitalizeFirstLetter()
ฟังก์ชั่นภายในองค์ประกอบที่กำหนดไว้ในSomeComponent.vue ในการดำเนินการนี้ฉันต้องนำเข้าก่อน:
<template>Some Component</template>
<script>
import {capitalizeFirstLetter} from '../helpers.js'
export default {
data() {
return {
myString = "test"
}
},
created() {
var newString = this.capitalizeFirstLetter(this.myString)
}
}
</script>
สิ่งนี้กลายเป็นปัญหาอย่างรวดเร็วเพราะท้ายที่สุดแล้วฉันจะนำเข้าฟังก์ชันไปยังส่วนประกอบต่างๆมากมายหากไม่ใช่ทั้งหมด สิ่งนี้ดูเหมือนจะซ้ำซากและยังทำให้โครงการดูแลรักษายากขึ้น ตัวอย่างเช่นถ้าฉันต้องการเปลี่ยนชื่อ helpers.js หรือฟังก์ชั่นที่อยู่ในนั้นฉันต้องเข้าไปในทุกองค์ประกอบเดียวที่นำเข้าและแก้ไขคำสั่งนำเข้า
เรื่องสั้นขนาดยาว:ฉันจะทำให้ฟังก์ชั่นภายใน helpers.js พร้อมใช้งานทั่วโลกได้อย่างไรเพื่อให้ฉันสามารถเรียกใช้งานภายในส่วนประกอบใดก็ได้โดยไม่ต้องนำเข้าก่อนแล้วจึงนำหน้าthis
นำหน้าชื่อฟังก์ชัน โดยพื้นฐานแล้วฉันต้องการที่จะทำได้:
<script>
export default {
data() {
return {
myString = "test"
}
},
created() {
var newString = capitalizeFirstLetter(this.myString)
}
}
</script>
this
แต่คุณจะต้องใช้