javascript - 如何在计算属性更改时更改数据?

在我的 vue.js 模板中,我有一个导航“弹出/模式”组件,它在用户点击时切换。这个导航栏的默认位置是关闭的,但是,当某个计算属性(在这种情况下,一旦回答了一些问题)评估为真时,我希望导航栏的默认位置是“弹出” 失去模态组件的切换能力。

我曾尝试直接更改计算属性中的数据,但此后了解到(通过环顾四周)这是不好的做法。经过一些研究,似乎设置一个观察者在计算属性 allAnswered 返回 true 时调用方法是可行的方法,但我根本无法让它工作。

它是一个更大模板的一部分,所以我附上了下面代码的相关部分:

<template>
    <div class="m-btn__nav" @click="showNav = true"><h4>Where to?</h4></div>
    <Navigation v-if="showNav" @close="showNav = false"></Navigation>
</template>
<script>
export default {
    data () {
        return {
            showNav: false
        }
    },
    computed: {
        allAnswered () {
            let q = this.getRoomQuestions(1)
            let a = []
            for (let index = 0; index < q.length; ++index) {
                a.push(q[index].answered)
            }
            if (Object.keys(a).every(i => a[i])) {
                return true
            } else {
                return false
            }
        }
    },
    watch: {
        allAnswered: function (n) {
            this.updateNav()
        }
    },
    methods: {
        updateNav: function () {
          this.showNav = true
        }
    }
}
</script>

当计算属性 allAnswered 从返回 false 更改为 true 时,我希望观察者 allAnswered 触发并且触发方法 updateNav 来更改 showNav 数据。结果是,即使 allAnswered 计算属性重新求值,它也不会触发观察者/方法并更改数据。

最佳答案

计算仅在使用时进行评估。 您没有使用计算出的 allAnswered(),因此输出没有改变。 尝试将它放在模板或 mounted() Hook 中。

https://stackoverflow.com/questions/54146921/

相关文章:

android - 获取/返回由 Android Room 数据库生成的自动生成的 ID(作为主键)

python - Apache Beam python Bigquery 将流式插入更改为批量插入?

c# - Selenium Firefox 不添加扩展

python - 需要帮助来模拟 xhr 请求

node.js - 为什么作为响应 SIGINT 信号的回调调用的方法在进程终止之前没有完全完成?

javascript - Laravel/Vue.js项目中如何使用Vuesax上传组件?

django - 使用 django 和 firestore,非关系数据库

github - 不存在 Jira 票证时如何阻止 GitHub 拉取请求

aws-lambda - AWS Lambda Go : The VM errors out in

php - symfony 4 正在创建发布请求