[解決済み] Vue.js - シングルファイルコンポーネントでヘルパー関数をグローバルに利用できるようにする
質問
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')
私の App.vue ファイルには、テンプレートが含まれています。
<template>
<navbar></navbar>
<div class="container">
<router-view></router-view>
</div>
</template>
<script>
export default {
data() {
return {
// stuff
}
}
}
</script>
次に、単一ファイルのコンポーネントの束を用意し、Vue-Router が
<router-view>
タグの中にあります。
では、例えば
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>
これはすぐに問題になります。なぜなら、すべてではないにしても、多くの異なるコンポーネントに関数をインポートすることになってしまうからです。これは繰り返しのように見え、また、プロジェクトを維持するのが難しくなります。たとえば、helper.js またはその中の関数の名前を変更したい場合、それをインポートするすべてのコンポーネントに移動して、import 文を修正する必要があります。
長い話を短くします。
helpers.js内の関数を
グローバルに
の中で呼び出せるようにするにはどうしたらよいでしょうか?
の中で呼び出すことができます。
コンポーネントの中で呼び出すことができます。
this
を関数名の前に付けることなく?私は基本的にこれを行うことができるようにしたい。
<script>
export default {
data() {
return {
myString = "test"
}
},
created() {
var newString = capitalizeFirstLetter(this.myString)
}
}
</script>
どのように解決するのですか?
<ブロッククオートコンポーネントの内部で、最初にそれらをインポートし、次に関数名の前にこれを追加することなく
あなたが説明したことは ミキシン .
Vue.mixin({
methods: {
capitalizeFirstLetter: str => str.charAt(0).toUpperCase() + str.slice(1);
}
})
これはグローバルなミキシンで、これを使うとすべてのコンポーネントに
capitalizeFirstLetter
メソッドを持つので
this.capitalizeFirstLetter(...)
をコンポーネントメソッドから呼び出すこともできますし、直接
capitalizeFirstLetter(...)
として直接呼び出すこともできます。
動作例です。 http://codepen.io/CodinCat/pen/LWRVGQ?editors=1010
こちらのドキュメントをご覧ください。 https://vuejs.org/v2/guide/mixins.html
関連
-
[解決済み] Laravel Spark v4.0.9で「Vue packages version mismatch」エラーを修正するにはどうすればいいですか?
-
Vue.js学习的第一天
-
Vueプロジェクトのビルド共通設定ファイル、request.jsとvue.config.js
-
vue3 が axios エラーを導入する 未定義または null をオブジェクトに変換できない
-
[解決済み】TypeError: this.getOptions は関数ではありません。
-
[解決済み】名前空間が設定された2つのVuexモジュール間でアクションをディスパッチする方法はありますか?
-
[解決済み】@clickとv-on:clickの違い Vuejs
-
[解決済み】Vuex - ミューテーションに複数のパラメータを渡す
-
[解決済み] vuejs ルータのオプションのパラメータ
-
[解決済み] Vue.js:各コンポーネントインスタンスにユニークなIDを設定するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
_this.axios is not a functionの原因と解決方法
-
TypeError: undefinedはオブジェクトではありません('i18n._t'を評価中)。
-
[解決済み] Vue.jsでグローバルフィルタを大量に追加する方法は?
-
[解決済み】Vue.js - urlからハッシュバン#!を削除するには?
-
[解決済み】TypeError: this.getOptions は関数ではありません。
-
[解決済み】他のアクションの中からアクションを呼び出す
-
[解決済み】Vuex - ミューテーションに複数のパラメータを渡す
-
[解決済み] Vueプロジェクトにおけるviewsフォルダとcomponentsフォルダの違いは何ですか?
-
[解決済み] vuejs ルータのオプションのパラメータ
-
[解決済み] Vueアプリのビルドを生成するには、どのコマンドを使用すればよいですか?