Javascript 为什么Vue组件不会在选择更改时更新
我有一个表单,当选择框更改时,它会更改vue组件中的一些文本。我在JSFIDLE中创建了一个高度最小化的版本,以显示我遇到的问题: HTML: 基本上,当我从下拉列表中选择女性或男性时,我的vue组件应该更新h标记以显示您的详细信息。当我选择夫妇,我的视图组件应该更新说她的详细信息和他的详细信息。但是,它并没有更新她的第一个索引,而是维护您的索引 看看JSFIDLE,您就会明白我的确切意思Javascript 为什么Vue组件不会在选择更改时更新,javascript,vue.js,vuejs2,vue-component,Javascript,Vue.js,Vuejs2,Vue Component,我有一个表单,当选择框更改时,它会更改vue组件中的一些文本。我在JSFIDLE中创建了一个高度最小化的版本,以显示我遇到的问题: HTML: 基本上,当我从下拉列表中选择女性或男性时,我的vue组件应该更新h标记以显示您的详细信息。当我选择夫妇,我的视图组件应该更新说她的详细信息和他的详细信息。但是,它并没有更新她的第一个索引,而是维护您的索引 看看JSFIDLE,您就会明白我的确切意思 只是想知道我做错了什么。我认为在组件中使用watcher是被动的。如果道具值得到更新,您就不会在孩子的内部
只是想知道我做错了什么。我认为在组件中使用watcher是被动的。如果道具值得到更新,您就不会在孩子的内部进行监视。 因此,每当道具数据发生变化时,您也需要在子组件中观察道具数据 看, 或计算属性
您使用了错误的引用:详图构件接收数据,但模板中的引用项无效 如果按以下方式更改模板:
<template id="details">
<div>
<h4>
<span v-if="data.gender === 3 && index === 0">Her</span>
<span v-else-if="data.gender === 3 && index === 1">His</span>
<span v-else>Your</span>
Health Details
</h4>
<div>Index: {{index}}</div>
<div>Gender: {{data.gender}}</div>
</div>
</template>
看到这一点就行了
这里的问题是,您在第一个细节对象中不知何故有性别1,因此得到的是您的而不是她。问题是由代码的这一部分引起的:
data() {
return {
item: {
gender: this.data.gender
}
}
}
当您将道具中的性别属性值指定给数据对象内的属性时,它会立即失去引用。因此,当数据道具更新时,它没有更新您的item.gender
如果您的目的只是将性别别名到一个名称较短的变量中以便于使用,则可以使用属性,该属性也将在每次更改数据时更新
computed: {
item() {
return this.data
}
}
我通常喜欢使用计算属性而不是观看,我认为这样更干净。这样,您不必同时定义计算逻辑和存储结果的神奇位置。
computed:{
item(){
return this.data;
}
}
<template id="details">
<div>
<h4>
<span v-if="data.gender === 3 && index === 0">Her</span>
<span v-else-if="data.gender === 3 && index === 1">His</span>
<span v-else>Your</span>
Health Details
</h4>
<div>Index: {{index}}</div>
<div>Gender: {{data.gender}}</div>
</div>
</template>
data() {
return {
item: {
gender: this.data.gender
}
}
}
computed: {
item() {
return this.data
}
}