Vuex允许您将商店注入您的根实例,使其可以通过this.$store
在所有子组件中访问。
如果没有Vuex,是否可以将自定义商店实现注入子组件?
e.g。
// main.js
let app = new Vue({router, store, ...App}).$mount("#flightdeck-app")
export { app, store, router }
// SomeComponent.vue
export default {
name: "Overview",
components: { "credentials": Credentials },
computed: {
count() {
// injected store; is currently undefined.
return this.$store.state.items.length
}
},
尝试访问this.$store
会导致子组件中的未定义,因为Vuex似乎有额外的钩子来实现这一点。
答案 0 :(得分:2)
您可以为vue创建一个自定义插件,用于注册初始化您的自定义商店(或任何内容,我只是为了演示而创建一个记录器对象)。
例如,您可以
//myLogger.js
export default {
install(Vue, options) {
function log(type, title, text) {
console.log(`[${type}] ${title} - ${text}`);
}
Vue.prototype.$log = {
error(title, text) { log('danger', title, text) },
success(title, text) { log('success', title, text) },
log
}
}
}
在您的主Vue实例告诉您注册插件之前
//main.js
import Logger from './path/to/myLogger';
Vue.use(Logger);
var vm = new Vue({
el: '#app',
template: '<App/>',
components: { App }
})
现在,您可以在任何子组件上调用this.$log
//myComponent.vue
export default {
data() {
return {};
},
methods: {
Save() {
this.$log.success('Transaction saved!');
}
}
}
希望有所帮助,有关详细信息,请参阅Vue plugins documentation
答案 1 :(得分:1)
只需在组件文件中使用:
import store from './vuex/store.js'