Vue.js从应用程序外部更改数据VUEX存储状态

时间:2019-01-04 08:37:24

标签: javascript vuejs2 vuex

例如,我有一个app.js和一个store.js。完成npm run dev之后,我得到一个.js,可以将其包含在包含<div>

的页面中

现在我想要的是使用javascript之类的方法从外部更改state.baseurl

var options = {
    baseurl:  'http://www.domain.co/'
}

那有可能吗,我该如何实现呢?

App.js

window.Vue = require('vue')
import store from './store'
import adrescheck from '../../../../../../../../resources/assets/js/vuecomponenten/components/check'
Vue.component('check', check)
import app from './app.vue'

const app = new Vue({
    el: '#app',
    store,
    render: h => h(app)

});

Store.js

window.Vue = require('vue');

import Vuex from 'vuex'

Vue.use(Vuex)

const store = {
    state: {
        baseurl: 'http://www.domain.nl/'
    }
}

export default new Vuex.Store(
    store
);

编辑:

当我执行npm时,运行watch-poll / dev / prod会生成一个.js并将其与webpack一起复制到公共文件夹中。从另一个域中,我要包含此js 并且要从该域中操作state.baseurl。因此依赖注入。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,我认为最好的方法就是使用webpack define plugin

  

传递给DefinePlugin的每个键是一个标识符或多个   与..

相连的标识符      

如果该值是字符串,它将用作代码片段。如果   value不是一个字符串,它将被字符串化(包括函数)。如果   该值是一个对象,所有键的定义方式相同。如果你   将typeof作为键的前缀,仅为typeof调用定义。的   值将内联到代码中,从而允许缩小   删除多余的条件。

new webpack.DefinePlugin({
  PRODUCTION: JSON.stringify(true),
  VERSION: JSON.stringify('5fa3b9'),
  BROWSER_SUPPORTS_HTML5: true,
  TWO: '1+1',
  'typeof window': JSON.stringify('object'),
  'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
});

然后用js

if (!PRODUCTION) {
  console.log('Debug info');
}

if (PRODUCTION) {
  console.log('Production log');
}