J'ai un projet Vue 2 qui a de nombreux (50+) composants mono-fichier . J'utilise Vue-Router pour le routage et Vuex pour l'état.
Il existe un fichier, appelé helpers.js , qui contient un ensemble de fonctions générales, telles que la mise en majuscule de la première lettre d'une chaîne. Ce fichier ressemble à ceci:
export default {
capitalizeFirstLetter(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
}
Mon fichier main.js initialise l'application:
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')
Mon fichier App.vue contient le modèle:
<template>
<navbar></navbar>
<div class="container">
<router-view></router-view>
</div>
</template>
<script>
export default {
data() {
return {
//stuff
}
}
}
</script>
J'ai alors un tas de composants à fichier unique, que Vue-Router gère pour naviguer à l'intérieur de la <router-view>
balise dans le modèle App.vue.
Maintenant, disons que j'ai besoin d'utiliser la capitalizeFirstLetter()
fonction dans un composant défini dans SomeComponent.vue . Pour ce faire, je dois d'abord l'importer:
<template>Some Component</template>
<script>
import {capitalizeFirstLetter} from '../helpers.js'
export default {
data() {
return {
myString = "test"
}
},
created() {
var newString = this.capitalizeFirstLetter(this.myString)
}
}
</script>
Cela devient rapidement un problème car je finis par importer la fonction dans de nombreux composants différents, sinon dans tous. Cela semble répétitif et rend également le projet plus difficile à maintenir. Par exemple, si je veux renommer helpers.js, ou les fonctions qu'il contient, je dois ensuite accéder à chaque composant qui l'importe et modifier l'instruction d'importation.
Pour faire court: comment rendre les fonctions de helpers.js globalement disponibles afin de pouvoir les appeler dans n'importe quel composant sans avoir à les importer au préalable, puis à les ajouter this
au nom de la fonction? Je veux essentiellement pouvoir faire ceci:
<script>
export default {
data() {
return {
myString = "test"
}
},
created() {
var newString = capitalizeFirstLetter(this.myString)
}
}
</script>
this
.