Vue.js 按属性从dom中选择v-for项的最简单方法?
我正在呈现一个交易列表,如下所示:Vue.js 按属性从dom中选择v-for项的最简单方法?,vue.js,vuejs2,vue-component,v-for,Vue.js,Vuejs2,Vue Component,V For,我正在呈现一个交易列表,如下所示: <deal :deal="deal" v-for="(deal, index) in deals" :key="index" ref="deals" @click.native="setScrollLocation(deal.id)"> </deal> 现在我有了一些东西,可以使用document.querySelector来查询,比如this.$el.querySelector 我不喜
<deal :deal="deal"
v-for="(deal, index) in deals"
:key="index"
ref="deals"
@click.native="setScrollLocation(deal.id)">
</deal>
现在我有了一些东西,可以使用document.querySelector
来查询,比如this.$el.querySelector
我不喜欢在我的组件中使用类似于querySelector的东西,因为这不是容错的。有什么更好的方法可以做到这一点呢?如果您的组件在其挂载的钩子中有一个事件,在销毁之前在其钩子中有另一个事件,则父组件可以使用它们来维护从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];
}
}
然后像这样把它们连接起来
<deal :deal="deal"
v-for="(deal, index) in deals"
:key="index"
ref="deals"
@mapElement="mapElement"
@unmapElement="unmapElement">
</deal>
然后,当您需要与交易id关联的元素时,它位于this.elementMap[id]
中,可能是一个指令,用于创建从id
到元素的映射。或者在销毁组件的挂钩之前,从挂载的和管理这样的映射。@RoyJ想详细说明一下吗?我还想知道ref
属性是否可以设置为deal.id
或其他属性。这将允许我从$refs
元素中选择它。该死,这是一个聪明的解决方案。我要试试这个。
<deal :deal="deal"
v-for="(deal, index) in deals"
:key="index"
ref="deals"
@mapElement="mapElement"
@unmapElement="unmapElement">
</deal>