javascript - Action 函数无法识别vuex数据

标签 javascript vue.js vuejs2 vue-component

我正在尝试根据组件上的选择列表执行 switch case。

   <div class="col-md-7">
        <select class="form-control" id="sel1" v-model="getDocumentSettings.margin" @change="customMargin(getDocumentSettings.margin)">
            <option v-for="item in getMarginOptions">{{item}}</option>
        </select>
    </div>

getMarginOptions 是一个计算属性,它返回一个选项列表,可以是

marginOptions: [
        "Custom",
        "Normal",
        "Narrow",
        "Moderate",
        "Wide",
        "Mirrored",
        "Office Default"
    ]

此数据位于 vuex 存储中并被检索,我的问题是根据选择更改其他数据,当用户选择一个属性时,我想更改此中的边距(左,右,上,下)对象(也在 vuex 内部)

Doc: {
    key: "Document",
    left: 0,
    right: 0,
    top: 0,
    fileName: "",
    bottom: 0,
    margin: "Custom",
},

所以我在我的 vuex 中放置了一个 switch case,如下所示:

actions: {
        customMargin(obj) {
            switch (obj.data) {
                case "Custom": obj.type.Doc.left = 0; obj.type.Doc.right = 0; obj.type.Doc.top = 0; obj.type.Doc.bottom = 0;
                    break;
                case "Normal": obj.type.Doc.left = 1; obj.type.Doc.right = 1; obj.type.Doc.top = 1; obj.type.Doc.bottom = 1;
                    break;
                case "Narrow": obj.type.Doc.left = 0.5; obj.type.Doc.right = 0.5; obj.type.Doc.top = 0.5; obj.type.Doc.bottom = 0.5;
                    break;
                case "Moderate": obj.type.Doc.left = 0.75; obj.type.Doc.right = 0.75; obj.type.Doc.top = 1; obj.type.Doc.bottom = 1;
                    break;
                case "Wide": obj.type.Doc.left = 2; obj.type.Doc.right = 2; obj.type.Doc.top = 1; obj.type.Doc.bottom = 1;
                    break;
                case "Mirrored": obj.type.Doc.left = 1.25; obj.type.Doc.right = 1; obj.type.Doc.top = 1; obj.type.Doc.bottom = 1;
                    break;
                case "Office Default": obj.type.Doc.left = 1.25; obj.type.Doc.right = 1.25; obj.type.Doc.top = 1; obj.type.Doc.bottom = 1;
                    break;
                default: obj.type.Doc.left = 0; obj.type.Doc.right = 0; obj.type.Doc.top = 0; obj.type.Doc.bottom = 0;
                    break;
            }
        }
    }

它应该接收一个状态对象,以便我可以访问我的文档以及所选的选项,这就是我的调用方式:

methods: {
    customMargin(option) {
        this.$store.dispatch({
            type: 'customMargin',
            data: option
        })
    },
},

我认为我的问题之一是我如何使用 vuex 处理操作的方式,我想从 select 发送选项并更改 vuex 内的文档边距。

最佳答案

我认为问题出在 vuex 中的操作处理程序中

actions: {
  customMargin(context, obj)  {
    // your logic here
  } 
}

第一个操作参数是使用 commit 等方法存储上下文

您始终可以在操作处理程序中添加 console.log(arguments) 来检查到底传递到函数中的内容

关于javascript - Action 函数无法识别vuex数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45567370/

相关文章:

javascript - 如何使用 Node.js 的加密库生成 scrypt 哈希?

javascript - 有没有一种方法可以初始化一个保留初始 HTML 的 Vue 对象

vue.js - 当插入一个新组件时,所有其余组件都会在应用程序中消失

javascript - 为什么 crockford 在他的 json_parse 函数中创建这种类型的错误函数?

javascript - 如何使用 node.js 将当前正在下载的视频流式传输到 html5 播放器?

javascript - 如何在 Angular httpClient 中通过一个套接字连接发出多个请求?

vue.js - Vuetify 在 css 中自定义 v-btn Prop

javascript - 视觉 : Displaying nested data in a table

javascript - 如何禁用选择选项的值? (vue.js 2)

javascript - Vue.js 并非所有过渡组 child 都具有动画效果