インスタンス化時にVueコンポーネントにグローバルに渡したいjavascript変数があるため、登録された各コンポーネントがプロパティとして持っているか、グローバルにアクセスできます。
注:: vuejsのこのグローバル変数をREAD ONLYプロパティとして設定する必要があります
Global Mixin を使用して、すべてのVueインスタンスに影響を与えることができます。このミックスインにデータを追加して、すべてのvueコンポーネントで値を使用可能にすることができます。
その値を読み取り専用にするには、 this stackoveflow answer で説明されている方法を使用できます。
以下に例を示します。
// This is a global mixin, it is applied to every vue instance
Vue.mixin({
data: function() {
return {
get globalReadOnlyProperty() {
return "Can't change me!";
}
}
}
})
Vue.component('child', {
template: "<div>In Child: {{globalReadOnlyProperty}}</div>"
});
new Vue({
el: '#app',
created: function() {
this.globalReadOnlyProperty = "This won't change it";
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.3/vue.js"></script>
<div id="app">
In Root: {{globalReadOnlyProperty}}
<child></child>
</div>
たとえば、すべてのコンポーネントはグローバルappName
にアクセスできます。1行のコードを記述するだけです。
Vue.prototype.$appName = 'My App'
$
は魔法ではなく、すべてのインスタンスで使用可能なプロパティにVueが使用する規則です。
または、すべてのグローバルメソッドまたはプロパティを含む プラグインの作成 を使用できます。
Mixinを使用して、varを次のように変更できます。
// This is a global mixin, it is applied to every vue instance
Vue.mixin({
data: function() {
return {
globalVar:'global'
}
}
})
Vue.component('child', {
template: "<div>In Child: {{globalVar}}</div>"
});
new Vue({
el: '#app',
created: function() {
this.globalVar = "It's will change global var";
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.3/vue.js"></script>
<div id="app">
In Root: {{globalVar}}
<child></child>
</div>
グローバル変数にVuejsを含む何も書き込まない場合、Object.freeze
を使用してオブジェクトをフリーズできます。 Vueのビューモデルに追加しても、フリーズ解除されません。別のオプションは、オブジェクトがグローバルに書き込まれることを意図している場合に、VueにオブジェクトのフリーズコピーをVuejsに提供することです:var frozenCopy = Object.freeze(Object.assign({}, globalObject))