【发布时间】:2019-09-07 14:43:15
【问题描述】:
我正在使用 Laravel - VueJS 框架。
我想检测鼠标滚动的 Y 位置并将其作为道具动态传递给组件导航栏。为此,我创建了一个 eventListener 并将 window.scrollY 值存储到 data() 内的变量 scrollPos 中。在此之后,我将 scrollPos 作为道具传递给导航栏组件,使用 v-bind:scrollPos="scrollPos"。不幸的是,在导航栏组件中传递的值只是 0,并且在任何进一步的鼠标滚动时都不会改变。
<Navbar v-on:scroll="this.changeScrollPos" v-bind:scrollPos="scrollPos" />
mounted() {
console.log('Component mounted.');
window.addEventListener('scroll', function(e) {
this.scrollPos = window.scrollY;
console.log(this.scrollPos);
});
},
data() {
return {
scrollPos: 0
}
},
methods: {
changeScrollPos() {
console.log('Mouse scrolled');
}
}
我将值传递给 Navbar 组件,我只是想在导航栏中显示该值,导航栏固定在页面顶部,并且具有在单击时滚动到页面该部分的路由器链接.
<nav class="nav" id="nav">
<div class="nav-content>
<ul class="nav-items">
<li class="nav-item"><router-link to="/" v-scroll-to="'#section1'">{{ scrollPos }}</router-link></li>
</ul>
</div>
</nav>
<script>
export default {
props: [
"scrollPos"
]
}
</script>
我也尝试使用v-on:scroll="this.changeScrollPos()" 方法检查鼠标滚动发生任何变化后是否访问该方法,但没有。
谁能解释为什么这不起作用并帮助我将动态鼠标滚动值传递给导航栏组件。
编辑:这类似于Watch window.scrollY changes in Vuejs,但这个问题中的问题尚未解决,我可以提取鼠标滚动的值并显示它,我的问题是我想将此值传递给组件以及何时这个值改变了,传递给组件的值也应该改变(动态值被实时传递,基于鼠标滚动)。
【问题讨论】:
-
编辑了我的问题,我能够提取鼠标滚动的值(正如该问题中指出的问题)。我想将此值传递给我的组件,当此值更改时,我还想更改传递给组件的值。
-
this.scrollPos = window.scrollY;这里this不是 Vue 实例,因为您不使用箭头函数。 -
你能分享一下你是如何将数据传递给组件的,以及你是如何在内部使用它的吗?
-
我尝试在不使用
this的情况下引用变量,但它给出了错误Uncaught ReferenceError: scrollPos is not defined还为传递scrollPos 值的组件添加了附加代码。在主页中,我通过v-bind:scrollPos="scrollPos"传递值。
标签: javascript laravel vue.js