Применить глобальную переменную к Vuejs
У меня есть переменная javascript, которую я хочу передать глобально компонентам Vue при создании экземпляра, таким образом, каждый зарегистрированный компонент имеет это свойство как свойство или к нему можно получить доступ во всем мире.
Примечание. Мне нужно установить эту глобальную переменную для vuejs как свойство READ ONLY
Ответы
Ответ 1
Вы можете использовать Global Mixin для воздействия на каждый экземпляр Vue. Вы можете добавить данные в этот mixin, сделав значение/значения доступными для всех компонентов vue.
Чтобы сделать это значение "Только для чтения", вы можете использовать метод, описанный в этом ответе stackoveflow.
Вот пример:
// 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>
Ответ 2
Просто добавление свойств экземпляра
Например, все компоненты могут обращаться к глобальному appName
, вы просто пишете однострочный код:
Vue.prototype.$appName = 'My App'
$
не волшебство, это соглашение, которое Vue использует для свойств, доступных для всех экземпляров.
Кроме того, вы можете написать плагин, который включает все глобальные методы или свойства.
Ответ 3
Вы можете использовать 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 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>
Ответ 4
Если глобальная переменная не должна быть записана ничем, включая Vuejs, вы можете использовать Object.freeze
, чтобы заморозить ваш объект. Добавление его в Vue viewmodel не разморозит его.
Другой вариант - предоставить Vuejs замороженную копию объекта, если объект предназначен для глобальной записи, а не для Vue: var frozenCopy = Object.freeze(Object.assign({}, globalObject))