Algolia Vue 即时搜索 - 切换 class 正在重置属性
Algolia Vue Instant Search – Toggling class is resetting attributes
我有一个 Algolia refinement list,但每次我在它周围切换 class 时,查询都会消失。我不知道是什么在重置这些值。
这是我当前的示例:
<template>
<div id="app" :class="{active}">
<ais-instant-search :search-client="searchClient" index-name="products">
<button @click="toggleActive">Toggle</button>
<span>← Pressing this is wiping the search.</span>
<div class="dietary-requirements-dropdown--checkboxes">
<ais-refinement-list attribute="dietary" :sort-by="['name:asc']"></ais-refinement-list>
</div>
</ais-instant-search>
</div>
</template>
<script>
import algoliasearch from "algoliasearch/lite";
export default {
name: "App",
data() {
return {
active: false,
searchClient: algoliasearch(
"ZVIJ67X9P8",
"df6c2515326327131df74c0a879b8794"
)
};
},
methods: {
toggleActive() {
this.active = !this.active;
}
}
};
</script>
<style lang="scss">
.dietary-requirements-dropdown--checkboxes {
opacity: 1;
.active & {
opacity: 0.2;
}
}
</style>
正如@StevenB 所指出的,问题是 dom 元素的重新渲染,这是由于 class 名称的反应。
具体来说,包装器组件上的这个属性:
:class="{active}"
重新呈现包括此内容在内的所有内容ais-refinement-list
。这是一个问题,因为当列表被销毁时,反应式搜索有效地将所有不存在的复选框视为 not 检查,重置搜索。
这是一个简单的修复,但不是完全反应。我替换了:
toggleActive() {
this.active = !this.active;
}
用“香草”:
toggleActive() {
document.querySelector("#app").classList.toggle("active");
}
如果可用$refs
也更好
toggleActive() {
this.$refs.filters.classList.toggle("active");
}
这意味着 DOM 未重新呈现,复选框未重置,搜索保持不变。
我有一个 Algolia refinement list,但每次我在它周围切换 class 时,查询都会消失。我不知道是什么在重置这些值。
这是我当前的示例:
<template>
<div id="app" :class="{active}">
<ais-instant-search :search-client="searchClient" index-name="products">
<button @click="toggleActive">Toggle</button>
<span>← Pressing this is wiping the search.</span>
<div class="dietary-requirements-dropdown--checkboxes">
<ais-refinement-list attribute="dietary" :sort-by="['name:asc']"></ais-refinement-list>
</div>
</ais-instant-search>
</div>
</template>
<script>
import algoliasearch from "algoliasearch/lite";
export default {
name: "App",
data() {
return {
active: false,
searchClient: algoliasearch(
"ZVIJ67X9P8",
"df6c2515326327131df74c0a879b8794"
)
};
},
methods: {
toggleActive() {
this.active = !this.active;
}
}
};
</script>
<style lang="scss">
.dietary-requirements-dropdown--checkboxes {
opacity: 1;
.active & {
opacity: 0.2;
}
}
</style>
正如@StevenB 所指出的,问题是 dom 元素的重新渲染,这是由于 class 名称的反应。
具体来说,包装器组件上的这个属性:
:class="{active}"
重新呈现包括此内容在内的所有内容ais-refinement-list
。这是一个问题,因为当列表被销毁时,反应式搜索有效地将所有不存在的复选框视为 not 检查,重置搜索。
这是一个简单的修复,但不是完全反应。我替换了:
toggleActive() {
this.active = !this.active;
}
用“香草”:
toggleActive() {
document.querySelector("#app").classList.toggle("active");
}
如果可用$refs
也更好
toggleActive() {
this.$refs.filters.classList.toggle("active");
}
这意味着 DOM 未重新呈现,复选框未重置,搜索保持不变。