如何观察依赖于另一个值 vue 的值?
How to watch for a value which depends on another value vue?
首先,对于模糊的标题感到抱歉;我想不出一个非常简洁的。这是我的情况:
假设我在 vuex 商店中有用户、主题和评论。用户有姓名、主题列表以及他们当前选择的主题:
users: {
1: {
name: 'Tom',
topics: [1, 2],
selectedTopic: null // set to 1 and then 2 when user clicks "next"
},
2: {... }
},
topics:
1: {
title: 'Post!',
comments: [1, 2],
selectedComment: null
},
2: { ... }
},
comments:
1: {
title: 'Cool!'
},
2: { ... }
}
如果选择了用户,我想显示他们的名字。如果用户还选择了一个主题,则该主题也应该显示;他们还可以循环浏览主题。对于每个主题,他们都可以以相同的方式循环浏览评论。因此:
computed: {
// some getters
// ...
user () {
return this.getUser(this.userId)
},
topic () {
return this.getTopic(this.user.topics[this.user.selectedTopic])
},
comment () {
return this.getComment(this.topic.comments(this.topic.selectedComment])
}
在这种情况下,循环有效,但控制台显示 TypeError:"this.user.topics is undefined" 或 "this.user.selectedTopicis undefined" 在开始时(只是有时),当然是这样,因为我们还没有选择用户。另一方面,如果我将其替换为
topic () {
if (this.user) return this.getTopic(this.user.topics[this.user.selectedTopic])
}
我没有收到任何错误,但所选主题更改时值也没有更新。有什么好的处理方法吗?
基于 by Ivo Gelov,我到达了
return this.getTopic((this.user.topics || {})[this.user.selectedTopic])
这似乎可以解决问题。
首先,对于模糊的标题感到抱歉;我想不出一个非常简洁的。这是我的情况:
假设我在 vuex 商店中有用户、主题和评论。用户有姓名、主题列表以及他们当前选择的主题:
users: {
1: {
name: 'Tom',
topics: [1, 2],
selectedTopic: null // set to 1 and then 2 when user clicks "next"
},
2: {... }
},
topics:
1: {
title: 'Post!',
comments: [1, 2],
selectedComment: null
},
2: { ... }
},
comments:
1: {
title: 'Cool!'
},
2: { ... }
}
如果选择了用户,我想显示他们的名字。如果用户还选择了一个主题,则该主题也应该显示;他们还可以循环浏览主题。对于每个主题,他们都可以以相同的方式循环浏览评论。因此:
computed: {
// some getters
// ...
user () {
return this.getUser(this.userId)
},
topic () {
return this.getTopic(this.user.topics[this.user.selectedTopic])
},
comment () {
return this.getComment(this.topic.comments(this.topic.selectedComment])
}
在这种情况下,循环有效,但控制台显示 TypeError:"this.user.topics is undefined" 或 "this.user.selectedTopicis undefined" 在开始时(只是有时),当然是这样,因为我们还没有选择用户。另一方面,如果我将其替换为
topic () {
if (this.user) return this.getTopic(this.user.topics[this.user.selectedTopic])
}
我没有收到任何错误,但所选主题更改时值也没有更新。有什么好的处理方法吗?
基于
return this.getTopic((this.user.topics || {})[this.user.selectedTopic])
这似乎可以解决问题。