Ho un progetto Vue 2 che ha molti (50+) componenti a file singolo . Uso Vue-Router per il routing e Vuex per lo stato.
C'è un file, chiamato helpers.js , che contiene un mucchio di funzioni generiche, come la capitalizzazione della prima lettera di una stringa. Questo file ha questo aspetto:
export default {
capitalizeFirstLetter(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
}
Il mio file main.js inizializza l'app:
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')
Il mio file App.vue contiene il modello:
<template>
<navbar></navbar>
<div class="container">
<router-view></router-view>
</div>
</template>
<script>
export default {
data() {
return {
//stuff
}
}
}
</script>
Quindi ho un sacco di componenti a file singolo, che Vue-Router gestisce la navigazione all'interno del <router-view>
tag nel modello App.vue.
Ora diciamo che ho bisogno di utilizzare la capitalizeFirstLetter()
funzione all'interno di un componente definito in SomeComponent.vue . Per fare ciò, devo prima importarlo:
<template>Some Component</template>
<script>
import {capitalizeFirstLetter} from '../helpers.js'
export default {
data() {
return {
myString = "test"
}
},
created() {
var newString = this.capitalizeFirstLetter(this.myString)
}
}
</script>
Questo diventa rapidamente un problema perché finisco per importare la funzione in molti componenti diversi, se non tutti. Questo sembra ripetitivo e rende anche il progetto più difficile da mantenere. Ad esempio, se voglio rinominare helpers.js, o le funzioni al suo interno, devo quindi entrare in ogni singolo componente che lo importa e modificare l'istruzione import.
Per farla breve: come faccio a rendere disponibili globalmente le funzioni all'interno di helpers.js in modo da poterle chiamare all'interno di qualsiasi componente senza doverle prima importare e poi anteporre this
al nome della funzione? Fondamentalmente voglio essere in grado di farlo:
<script>
export default {
data() {
return {
myString = "test"
}
},
created() {
var newString = capitalizeFirstLetter(this.myString)
}
}
</script>
this
.