【发布时间】:2017-05-08 09:35:40
【问题描述】:
我有一个启用 vue-router 的应用程序,它使用单文件 .vue 组件,使用 browserify 捆绑。这个应用程序由一个烧瓶网络服务器提供服务,它将全局配置设置(页面标题、布局顺序等)作为 JSON 传递给它。我一直在努力以一种干净的方式将全局变量传递到应用程序中。
main.js(作为 browserify 的入口点):
var Content = require('./vue/Content.vue');
var App = Vue.extend();
var router = new VueRouter({ history: true });
router.map({
'/': { component: Content, name: 'home' }
});
router.start(App, '#app');
index.html,由烧瓶网络服务器提供服务
<body>
{% with ga_id = ''|get_env('GA_ID') %}
<div id="app" ><router-view ga-id={{ga_id}} global-settings={{globalsettings|tojson|safe}}></router-view></div>
{% endwith %}
<script type="text/javascript">
window.global_settings = {{globalsettings|tojson|safe}};
</script>
<script src="/js/build.js" defer></script>
</body>
App.vue,应用的主要组件:
<template>
</template>
<script type="text/javascript">
var app = {
props: ['gaId', 'globalSettings'],
ready: function ready() {
console.log(this.gaId); //returns expected string
console.log(this.globalSettings); //truncated at first space in the string
console.log(window.global_settings); // returns expected json
},
module.exports = app;
</script>
为了完整起见,routes.py:
@APP.route('/', methods=['GET'])
def index():
settings = APP.app_config['settings']
return render_template('index.html', rawsettings=settings)
通过在window上设置给Vue传递一个全局变量感觉不对,但是我一直无法传递它。
我尝试在main.js中使用Vue.extend中的数据函数:
Vue.extend({
data: function() {
return {
global: 'test'
}
}
})
但this.global 在App.vue 中未定义。我应该使用更好的模式吗?
【问题讨论】:
标签: javascript vue-router vue.js