Простой вариант использования: определенные элементы должны получить активный класс, установив для свойства "active" значение true (v-bind: class).Свойство «active» устанавливается в цикле foreach, после проверки некоторых условий, в методе «handleScroll».
Это работает, если я вызываю «handleScroll» непосредственно в созданном жизненном цикле.
<template>
<div class="c-sidebar">
<p
v-for="(sidebarItem, index) in sidebarItems"
v-bind:key="index"
v-bind:class="{ 'active': sidebarItem.active }"
>
{{ sidebarItem.label }}
</p>
</div>
</template>
<script lang="ts">
import { Component, Vue, Prop } from "vue-property-decorator";
import {SidebarItem, SidebarNavItem} from "../../Interfaces";
@Component
export default class Sidebar extends Vue {
sidebarItems: SidebarItem[];
public created() {
this.sidebarItems = [
{
label: "First item",
active: true
},
{
label: "Second item",
active: false
}
];
this.handleScroll();
}
public handleScroll() {
this.sidebarItems.forEach((sidebarItem: SidebarItem, index) => {
if (index == 1) {
sidebarItem.active = true;
} else {
sidebarItem.active = false;
}
});
}
}
</script>
Если я вызываю «handleScroll» из события окна, реактивность теряется.
Изменение
public created() {
...
this.handleScroll();
}
на
public created() {
...
window.addEventListener("scroll", this.handleScroll);
}
не работает,Метод выполняется, но реактивность в шаблоне теряется.
Вопрос : Как установить эти свойства в событии глобального окна и назначить их обратно для просмотра?