如何使用 webpack 在 Vue.js 中的路由组件之间共享数据?
How to share data across routed components in Vue.js using webpack?
所以我正在努力思考如何将 vue-loader
用于 Webpack,将 vue-router
用于路由,以及如何使用共享数据模型。我的理解是,您创建一个数据模型,然后将其传递给每个组件,并认为它们具有共享状态。似乎您应该使用数据模型而不是 props,因为它允许双向绑定。
我尝试了一些方法,但似乎没有任何效果。我尝试在路由器中传递 data
,但这并不能解决问题。
我主要用这个app.js
:
var $ = require('jquery'),
Vue = require('vue'),
VueRouter = require('vue-router');
Vue.use(VueRouter);
var first = require('vue!./first.vue');
var second = require('vue!./second.vue');
var sourceOfTruth = {
msg: "my message"
};
var App = new Vue({
data: sourceOfTruth,
});
var router = new VueRouter({
history: true
});
router.map({
'/foo': {
data: sourceOfTruth,
component: first
},
'/bar': {
data: sourceOfTruth,
component: second
}
});
router.start(App, '#app');
这是我的 first.vue
:
<template>
The message goes here -> {{ msg }}
</template>
<script type="text/javascript">
// ???
</script>
有什么想法吗?谢谢!
通过发送的自定义数据字段不像组件数据字段那样被访问。您正在尝试 {{ msg }}
,这将在您的组件中查找 msg
字段。
要访问通过路由器发送的数据,
{{ $route.data }}
现在,因为在你的情况下,数据依次 json,你会做
{{ $route.data.msg }}
查看 this very good article which deals with communication between independent components. It is also an introduction to the Flux
way of thinking with Vuex。一般来说,您应该可以使用共享存储实例,从单独的文件中将每个组件导入它,并通过分配给每个组件的数据使其具有反应性。
<template>
{{ sourceOfTruth.msg }}
</template>
<script>
import store from '../store'
export default {
data () {
return {
sourceOfTruth : store.sourceOfTruth
}
}
}
</script>
所以我正在努力思考如何将 vue-loader
用于 Webpack,将 vue-router
用于路由,以及如何使用共享数据模型。我的理解是,您创建一个数据模型,然后将其传递给每个组件,并认为它们具有共享状态。似乎您应该使用数据模型而不是 props,因为它允许双向绑定。
我尝试了一些方法,但似乎没有任何效果。我尝试在路由器中传递 data
,但这并不能解决问题。
我主要用这个app.js
:
var $ = require('jquery'),
Vue = require('vue'),
VueRouter = require('vue-router');
Vue.use(VueRouter);
var first = require('vue!./first.vue');
var second = require('vue!./second.vue');
var sourceOfTruth = {
msg: "my message"
};
var App = new Vue({
data: sourceOfTruth,
});
var router = new VueRouter({
history: true
});
router.map({
'/foo': {
data: sourceOfTruth,
component: first
},
'/bar': {
data: sourceOfTruth,
component: second
}
});
router.start(App, '#app');
这是我的 first.vue
:
<template>
The message goes here -> {{ msg }}
</template>
<script type="text/javascript">
// ???
</script>
有什么想法吗?谢谢!
通过发送的自定义数据字段不像组件数据字段那样被访问。您正在尝试 {{ msg }}
,这将在您的组件中查找 msg
字段。
要访问通过路由器发送的数据,
{{ $route.data }}
现在,因为在你的情况下,数据依次 json,你会做
{{ $route.data.msg }}
查看 this very good article which deals with communication between independent components. It is also an introduction to the Flux
way of thinking with Vuex。一般来说,您应该可以使用共享存储实例,从单独的文件中将每个组件导入它,并通过分配给每个组件的数据使其具有反应性。
<template>
{{ sourceOfTruth.msg }}
</template>
<script>
import store from '../store'
export default {
data () {
return {
sourceOfTruth : store.sourceOfTruth
}
}
}
</script>