Tôi có một dự án Vue 2 có nhiều (hơn 50) thành phần tệp đơn . Tôi sử dụng Vue-Router để định tuyến và Vuex cho trạng thái.
Có một tệp, được gọi là helpers.js , chứa một loạt các hàm có mục đích chung, chẳng hạn như viết hoa chữ cái đầu tiên của một chuỗi. Tệp này trông giống như sau:
export default {
capitalizeFirstLetter(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
}
Tệp main.js của tôi khởi tạo ứng dụng:
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')
Tệp App.vue của tôi chứa mẫu:
<template>
<navbar></navbar>
<div class="container">
<router-view></router-view>
</div>
</template>
<script>
export default {
data() {
return {
//stuff
}
}
}
</script>
Sau đó, tôi có một loạt các thành phần tệp đơn, mà Vue-Router xử lý điều hướng đến bên trong <router-view>
thẻ trong mẫu App.vue.
Bây giờ, hãy nói rằng tôi cần sử dụng capitalizeFirstLetter()
hàm bên trong một thành phần được định nghĩa trong SomeComponent.vue . Để làm điều này, trước tiên tôi cần nhập nó:
<template>Some Component</template>
<script>
import {capitalizeFirstLetter} from '../helpers.js'
export default {
data() {
return {
myString = "test"
}
},
created() {
var newString = this.capitalizeFirstLetter(this.myString)
}
}
</script>
Điều này nhanh chóng trở thành một vấn đề vì tôi kết thúc việc nhập hàm vào nhiều thành phần khác nhau, nếu không phải tất cả chúng. Điều này có vẻ lặp đi lặp lại và cũng làm cho dự án khó duy trì hơn. Ví dụ: nếu tôi muốn đổi tên helpers.js hoặc các hàm bên trong nó, thì tôi cần phải đi vào từng thành phần duy nhất nhập nó và sửa đổi câu lệnh nhập.
Tóm lại: làm cách nào để làm cho các hàm bên trong helpers.js khả dụng trên toàn cầu để tôi có thể gọi chúng bên trong bất kỳ thành phần nào mà không cần phải nhập chúng trước rồi thêm vào this
tên hàm? Về cơ bản tôi muốn có thể làm điều này:
<script>
export default {
data() {
return {
myString = "test"
}
},
created() {
var newString = capitalizeFirstLetter(this.myString)
}
}
</script>
this
.