vue.js - Vuejs 使用带有哈希变量的 v-if
问题描述
我正在尝试将 v-if 与应该为真或假的哈希变量一起使用。
所以在jsvascript中,我有
data: {
seen: {},
bicycles: [ ...data ...],
},
然后在创建时,我有自行车数组的长度,并使用自行车 ID 作为键将哈希中的一个项目设置为 false。
最后,
methods: {
seeMe: function (event) {
this.seen[event.target.id] = !this.seen[event.target.id];
console.log("LOGGING: you pressed " + event.target.id + " and seen value is now " + this.seen[event.target.id]);
console.log("LOGGING: the hash is now " + JSON.stringify(this.seen));
}
}
在我的html中
<ul>
<li v-for="bike in bicycles">
{{ bike.id }}
{{ bike.make }}
{{ bike.model }}
{{ bike.owner.userName }}
<button class="button-primary" v-bind:id="bike.id" v-on:click="seeMe">{{ bike.owner.userName }}</button>
<p><span v-if="'seen[bike.id">{{ bike.owner.firstName}} {{ bike.owner.surName}}</span></p>
</li>
</ul>
这不起作用..
这是按下任何按钮之前的控制台输出
LOGGING: length is 4
LOGGING: false when i is 1
LOGGING: false when i is 2
LOGGING: false when i is 3
LOGGING: false when i is 4
以及按下按钮 1、按钮 3、按钮 3 后的控制台输出
LOGGING: you pressed 1 and seen value is now true
LOGGING: the hash is now {"1":true,"2":false,"3":false,"4":false}
LOGGING: you pressed 3 and seen value is now true
LOGGING: the hash is now {"1":true,"2":false,"3":true,"4":false}
LOGGING: you pressed 3 and seen value is now false
LOGGING: the hash is now {"1":true,"2":false,"3":false,"4":false}
所以哈希正在更新。(这里有一个问题,它假设自行车记录是连续的并且从 1 开始,这不一定是这种情况,但这是另一个问题)
但是 v-if 没有看到哈希,因此当 seen[x] 的值发生变化时不会发生任何动作。
解决方案
在创建的地图的初始化我只是有
this.seen = false;
我把它改成了
Vue.set(this.seen, i, false);
现在它可以工作了。
推荐阅读
- javascript - 如何将 websocket/express 服务器分成不同的文件?
- nlp - AssertionError:您尝试使用“encoder_decoder”类型的预训练模型启动“encoder-decoder”类型的模型
- python - 如何计算百分位数
- reactjs - ant d form 图片上传
- python - Python 圆形科学记数法
- python - 如何在 Python 3 中写上标?
- android - 在Paging3中,删除item后,recyclerview如何恢复到原来的位置?
- apache-spark - Spark Streaming,无法访问流数据
- json - VS 代码开发工具和构建的程序的行为是不同的
- php - 如何在聚合根中测试生成的 id