【发布时间】:2021-08-15 20:56:45
【问题描述】:
我在 Vue 3 Composition API 中编写了以下内容。
如果您查看“onMounted”,我会将事件侦听器附加到窗口,以将状态框保持在屏幕底部。我使用的是绝对位置和底部 0。
我想知道是否可以通过替换 getElementById 来使这个更“Vue”?我尝试了 refs 但它不起作用。
有什么建议吗?或者我应该离开吗?
谢谢
<template>
<div>
<transition name="toast">
<div id="slide" class="slide-modal" v-if="statuses.length">
<div class="clear-notifications" @click='clearAllNotifications()'>Clear all notifications</div>
<div v-for="status in statuses" :key="status.id" class="status-div">
<div>{{ status.text }}</div>
<div @click="closeStatus(status)"><span class="-x10-cross"></span></div>
</div>
</div>
</transition>
</div>
</template>
<script lang="ts">
import { defineComponent, ref, computed, watch, onMounted } from "vue";
import { useStore } from "../model/DataStore";
export default defineComponent({
setup() {
const store = useStore();
const statuses = ref([]);
const statusMessage = computed(() => store.state.statusMessage);
function addStatus(newMessage) {
statuses.value.push({
id: statuses.value.length + 1,
text: newMessage
})
}
watch(statusMessage, (newValue: string, oldValue: string) => {
addStatus(statusMessage.value);
})
onMounted(() => {
window.addEventListener("scroll", function (e) {
let vertical_position = 0;
vertical_position = pageYOffset;
if(document.getElementById("slide")){
document.getElementById('slide').style.bottom = -(vertical_position) + 'px';
}
});
})
return {
store,
statuses,
addStatus
};
},
methods: {
clearAllNotifications() {
this.statuses = []
},
closeStatus(elm: any) {
const index = this.statuses.map((status) => status.id).indexOf(elm.id);
this.statuses.splice(index, 1);
}
}
})
</script>
这是幻灯片模式样式:
.slide-modal {
max-height: 200px;
width: 500px;
background-color: #f2f2f2;
color: #505050;
padding: 8px;
display: flex;
flex-direction: column;
gap: 8px;
overflow-x: hidden;
position: absolute;
bottom: 0;
}
【问题讨论】:
-
替换为 ref 时的代码是什么?
-
if(document.getElementById("slide")){ document.getElementById('slide').style.bottom = -(vertical_position) + 'px'; }
-
我不想使用 document.getElementById。
标签: vue.js vuejs3 vue-composition-api