मेरे पास एक Vue 2 परियोजना है जिसमें कई (50+) एकल-फ़ाइल घटक हैं । मैं रूटिंग और राज्य के लिए Vuex के लिए Vue-Router का उपयोग करता हूं।
एक फाइल है, जिसे हेल्पर्स.जेएस कहा जाता है , जिसमें सामान्य उद्देश्य वाले कार्यों का एक गुच्छा होता है, जैसे कि एक स्ट्रिंग के पहले अक्षर को कैपिटलाइज़ करना। यह फाइल इस तरह दिखती है:
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>
यह जल्दी से एक समस्या बन जाती है क्योंकि मैं अंत में फ़ंक्शन को कई अलग-अलग घटकों में आयात करता हूं, अगर उनमें से सभी नहीं। यह दोहराव लगता है और परियोजना को बनाए रखने के लिए कठिन भी बनाता है। उदाहरण के लिए यदि मुझे हेल्पर्स.जैस, या उसके अंदर के कार्यों का नाम बदलना है, तो मुझे हर एक घटक में जाने की जरूरत है जो इसे आयात करता है और आयात विवरण को संशोधित करता है।
लंबी कहानी छोटी: मैं विश्व स्तर पर हेल्पर्स.जैस के अंदर फंक्शंस कैसे उपलब्ध करवाता हूं ताकि मैं उन्हें किसी भी कंपोनेंट के अंदर कॉल कर सकूं और फिर this
फंक्शन के नाम पर प्रीप्रेंड कर सकूं । मैं मूल रूप से ऐसा करने में सक्षम होना चाहता हूं:
<script>
export default {
data() {
return {
myString = "test"
}
},
created() {
var newString = capitalizeFirstLetter(this.myString)
}
}
</script>
this
।