簡體   English   中英

根據Vuex狀態值更新動態組件禁用狀態

[英]Update dynamic components disabled state based on Vuex state value

我不知道我正在做的事情是否正確,但這是我正在嘗試做的簡化版本:

我希望有3個文件輸入,第二個和第三個被禁用,直到第一個選擇了一個文件。

我試圖將Vuex狀態變量設置為選擇的第一個文件輸入,但是在執行此操作時,其他2個輸入不會更新其禁用狀態。

我有一些動態創建的文件輸入,如下所示:

Vue.component('file-input', {
    props: ['items'],
    template: `<div><input type="file" v-on:change="fileSelect(item)" v-bind:id="item.id" v-bind:disabled="disabledState"></div>`,
    methods: {
        fileSelect: function(item) {
            store.commit('fileSelect', file);
        }
    },
    computed: {
        disabledState: function (item) {
            return {
                disabled: item.dependsOn && store.getters.getStateValue(item.dependsOn)
            }
        }
    }
}

組件的數據來自實例:

var vm = new Vue({
    data: {
        items: [
            { text: "One", id: "selectOne" },
            { text: "Two", id: "selectTwo", dependsOn: "fileOne" },
            { text: "Three", id: "selectThree", dependsOn: "fileOne" }
    }
});

現在,請注意“dependsOn”。 在Vuex商店中,我有一個相應的狀態項:

const store = new Vuex.Store({
    state: {
        files: [
            {
                fileOne: null
            }
        ]
    },
    mutations: {
        fileSelect(state, file) {
            state.files.fileOne = file;
        }
    },
    getters: {
        getStateValue: (state) => (stateObject) => {
            return state.files.findIndex(x => x[stateObject] === null) === 0 ? true : false;
        }
    }
});

現在,上面的內容在首次初始化所有內容時起作用。 但是,一旦選擇了第一個輸入,其他兩個輸入就不會改變。

一旦發生狀態突變,我不確定如何更新綁定。

我認為你需要重構你的變異以使state屬性可變,如下所示:

fileSelect(state, file) {
  Vue.set(state.files[0].fileOne, file);
}

好吧,我想通了......

因為我的狀態對象是一個對象數組,所以我不能只用state.files.fileOne改變一個屬性的值。 我需要做state.files[0].fileOne

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM