我正在呈现这样的交易列表:
<deal :deal="deal"
v-for="(deal, index) in deals"
:key="index"
ref="deals"
@click.native="setScrollLocation(deal.id)">
</deal>
现在交易有一个id
属性,你可以看到它被传递到setScrollLocation
方法。
如何从dom中选择具有特定交易ID的元素?
我可以使用类似数据属性的东西,只需在其上设置交易ID,如下所示:
<deal :data-deal-id="deal.id"></deal>
现在我有一些东西可以通过使用像document.querySelector
这样的东西用this.$el.querySelector
查询。
我不喜欢在我的组件中使用类似querySelector
的东西,因为这不是容错的。什么是更好的方法来做到这一点?
如果你的组件qazxswpo是emit
mounted
中的一个事件,而hook钩子中的另一个事件,父母可以使用它们来维护从beforeDestroy
到element的映射。
id
父母会有类似的东西
mounted() {
this.$emit('mapElement', deal.id, this.$el);
}
beforeDestroy() {
this.$emit('unmapElement', deal.id);
}
并会把它们连接起来
methods: {
mapElement(id, el) {
this.elementMap[id] = el;
},
unmapElement(id) {
delete this.elementMap[id];
}
}
然后,当您需要与交易ID相关联的元素时,它位于<deal :deal="deal"
v-for="(deal, index) in deals"
:key="index"
ref="deals"
@mapElement="mapElement"
@unmapElement="unmapElement">
</deal>
中。