У мене є проект Vue 2, який містить багато (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')
Файл My App.vue містить шаблон:
<template>
<navbar></navbar>
<div class="container">
<router-view></router-view>
</div>
</template>
<script>
export default {
data() {
return {
//stuff
}
}
}
</script>
Потім у мене є купа <router-view>
однофайлових компонентів, до яких Vue-Router обробляє навігацію всередині тегу в шаблоні 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 або функції всередині нього, мені потрібно перейти до кожного окремого компонента, який його імпортує, та змінити оператор import.
Коротко: як зробити функції всередині helpers.js глобально доступними, щоб я міг викликати їх всередині будь-якого компонента без необхідності спочатку імпортувати їх, а потім додавати this
до імені функції? Я в основному хочу мати можливість зробити це:
<script>
export default {
data() {
return {
myString = "test"
}
},
created() {
var newString = capitalizeFirstLetter(this.myString)
}
}
</script>
this
.