计算属性未更新

时间:2018-11-15 14:12:37

标签: javascript vue.js computed-properties

我有一个奇怪的问题。我正在尝试使用一个简单的时间跟踪应用程序。

所以我有这个表格。

<form class="form" @submit.prevent="saveHours">
    <div class="status">
        <div class="selector" v-for="(select, index) in select_all">
            <component :is="select" :id="index" @percentage="trackTime"></component>
        </div>
    </div><!-- /.status -->
    <div class="form-submit">
        <button type="submit" class="form__submit">
            <span v-if="loading">Guardando...</span>
            <span v-else>Guardar</span>
        </button>
    </div>
</form>

这是我的Vue代码

export default {
    name: 'home',
    data() {
        return {
            select_all: [Selector],
            loading: false,
            allTimes: [],
            saveForm: []
        }
    },
    components: {
        Selector
    },
    computed: {
        calculateTotal() {
            return this.allTimes.reduce((accumulator, currentValue) => parseInt(accumulator) + parseInt(currentValue), 0);
        }
    },
    methods: {
        addNewSelector() {
            this.calcTotal();
            this.select_all.push(Selector)
        },
        trackTime(time, index, proyecto) {
            this.currentTime = time;
            this.allTimes[index] = time;

            const data = {
                time,
                proyecto
            }

            this.saveForm[index] = data;
        },
        saveHours() {
            const currentWeek = moment(new Date()).format('w');
            const diverRef = db.collection('divers').doc(firebaseAuth.currentUser.email);
            const currentWeekRef = diverRef.collection('reportes').doc(`semana_${currentWeek}`);
            var self = this;
            currentWeekRef.get().then(function(doc) {
                if ( doc.exists ) {
                    console.log('Ya registraste tus horas');
                } else {
                    currentWeekRef.set({
                        data: self.saveForm
                    })
                }
            });
        },
    }
}

我有一个名为的组件,我的工作是当有人键入小时数时,我将该时间发回给上级,并使用trackTime函数将每个项目的时间添加到{{ 1}}数组。

我正在尝试使用计算属性allTimes来将时间相加,因此我知道用户何时完成了100%的小时数。但是没有更新。

真的很奇怪,如果我将它用作一种方法,它就像一个咒语,但是对我来说不起作用,因为我希望它在用户键入时进行更新,并且因为我正在使用输入组件我不能使用calculateTotal个事件。

我已经尝试了好几个小时了,而且一无所获。谢谢!

1 个答案:

答案 0 :(得分:0)

如果有人遇到相同的问题,Sergeon和Roy J在正确的地方。

我正在这样做

this.allTimes[index] = time;

那把Vue弄得一团糟。我将代码更改为

this.allTimes.splice(index, 1, time)

它现在可以完美运行。

谢谢