Вычисляемое свойство не обновляется - PullRequest
0 голосов
/ 15 ноября 2018

У меня странная проблема.Я пытаюсь сделать для простого приложения отслеживания времени.

Итак, у меня есть эта форма.

<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, чтобы добавить время каждого проекта в массив allTimes.

Я пытаюсь использовать вычисленное свойство calculateTotal, чтобы сложить время, чтобы я знал, когда пользователь завершил 100% часов.Но не обновляет.

Действительно странно, если я использую его как метод, он работает как шарм, но он не работает для меня, потому что я хочу, чтобы он обновлялся, когда пользователь печатает, и так как яЯ использую компонент для ввода Я не могу использовать keyup события.

Я пытался выяснить это в течение нескольких часов и ничего.Спасибо!

1 Ответ

0 голосов
/ 15 ноября 2018

Если у кого-то возникла такая же проблема, Сержон и Рой Дж, где правы.

Я делал это

this.allTimes[index] = time;

И это испортило Вью. Я изменил код на

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

И теперь он отлично работает.

Спасибо

...