简单用例:特定元素应通过将属性“active”设置为 true (v-bind:class) 来获得活动类。在检查一些条件后,在方法“handleScroll”中,在 foreach 循环中设置属性“active”。
如果我在创建的生命周期中直接调用“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);
}
不起作用。该方法已执行,但模板中的反应性丢失。
问题:如何在全局窗口事件中设置这些属性并将它们分配回视图?