Birçok (50+) tek dosya bileşenine sahip bir Vue 2 projem var . Yönlendirme için Vue-Router ve durum için Vuex kullanıyorum.
Bir dizenin ilk harfini büyük harfle yazmak gibi bir dizi genel amaçlı işlevi içeren helpers.js adlı bir dosya vardır . Bu dosya şuna benzer:
export default {
capitalizeFirstLetter(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
}
Benim main.js dosya uygulamasını başlatır:
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')
Benim App.vue dosyası şablonunu içerir:
<template>
<navbar></navbar>
<div class="container">
<router-view></router-view>
</div>
</template>
<script>
export default {
data() {
return {
//stuff
}
}
}
</script>
Daha sonra, Vue-Router'ın <router-view>
App.vue şablonundaki etiketin içine gitmeyi yönettiği bir sürü tek dosyalı bileşenim var.
Şimdi, capitalizeFirstLetter()
fonksiyonu SomeComponent.vue içinde tanımlanan bir bileşenin içinde kullanmam gerektiğini varsayalım . Bunu yapmak için önce içeri aktarmam gerekiyor:
<template>Some Component</template>
<script>
import {capitalizeFirstLetter} from '../helpers.js'
export default {
data() {
return {
myString = "test"
}
},
created() {
var newString = this.capitalizeFirstLetter(this.myString)
}
}
</script>
Bu hızlı bir sorun haline geliyor, çünkü sonunda işlevi hepsi olmasa da birçok farklı bileşene aktarıyorum. Bu tekrarlayıcı görünüyor ve aynı zamanda projenin sürdürülmesini zorlaştırıyor. Örneğin, helpers.js'yi veya içindeki işlevleri yeniden adlandırmak istersem, onu içe aktaran her bileşene girmem ve içe aktarma ifadesini değiştirmem gerekir.
Uzun lafın kısası: helpers.js içindeki işlevleri global olarak kullanılabilir hale getirebilirim, böylece onları herhangi bir bileşenin içinde önce içeri aktarmak ve ardından this
işlev adının başına eklemek zorunda kalmadan çağırabilirim ? Temelde bunu yapabilmek istiyorum:
<script>
export default {
data() {
return {
myString = "test"
}
},
created() {
var newString = capitalizeFirstLetter(this.myString)
}
}
</script>
this
.