Mam projekt Vue 2, który ma wiele (50+) jednoplikowych komponentów . Używam Vue-Router do routingu i Vuex do stanu.
Istnieje plik o nazwie helpers.js , który zawiera kilka funkcji ogólnego przeznaczenia, takich jak wielkie litery w pierwszej literze ciągu. Ten plik wygląda następująco:
export default {
capitalizeFirstLetter(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
}
Mój plik main.js inicjuje aplikację:
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')
Plik My App.vue zawiera szablon:
<template>
<navbar></navbar>
<div class="container">
<router-view></router-view>
</div>
</template>
<script>
export default {
data() {
return {
//stuff
}
}
}
</script>
Mam wtedy kilka komponentów jednoplikowych, które Vue-Router obsługuje przechodzenie do wewnątrz <router-view>
jednoplikowych tagu w szablonie App.vue.
Powiedzmy teraz, że muszę użyć capitalizeFirstLetter()
funkcji wewnątrz komponentu zdefiniowanego w SomeComponent.vue . Aby to zrobić, najpierw muszę go zaimportować:
<template>Some Component</template>
<script>
import {capitalizeFirstLetter} from '../helpers.js'
export default {
data() {
return {
myString = "test"
}
},
created() {
var newString = this.capitalizeFirstLetter(this.myString)
}
}
</script>
Szybko staje się to problemem, ponieważ w końcu importuję funkcję do wielu różnych komponentów, jeśli nie do wszystkich. Wydaje się to powtarzalne, a także utrudnia utrzymanie projektu. Na przykład, jeśli chcę zmienić nazwę helpers.js lub znajdujących się w nim funkcji, muszę przejść do każdego komponentu, który go importuje, i zmodyfikować instrukcję import.
Krótko mówiąc: jak sprawić, by funkcje zawarte w helper.js były globalnie dostępne, aby móc je wywoływać w dowolnym komponencie bez konieczności ich wcześniejszego importowania, a następnie dodawania this
do nazwy funkcji? Zasadniczo chcę móc to zrobić:
<script>
export default {
data() {
return {
myString = "test"
}
},
created() {
var newString = capitalizeFirstLetter(this.myString)
}
}
</script>
this
.