javascript - 如何滚动到 asyncData 之后的元素?

标签 javascript vue.js nuxt.js

我通过 asyncData 获取一些数据,在显示项目后,网站必须滚动到一个元素。

methods: {
    scrollTo() {
        // ScrollTo Element...
    }
},
asyncData({ env, params }) {
    return axios.get(`${env.cockpit.apiUrl}/collections/get/kalender`)
    .then(({data}) => {
        return {
            items
        }
    })
}

this.scrollTo()asyncData 中不可用。

如果我在 mounted() 方法中使用超时,它就会起作用。如果没有超时则不会。

mounted() {
    setTimeout(() => {
        this.scrollTo()
    }, 500)
}

但我认为,这不是正确的方式。与 this.$nextTick 相同的事情也不起作用。

通过asyncData()获取数据后滚动到元素的正确方法是什么?

最佳答案

我建议使用事件,我不太确定 vue 中的事件调度,在 Angular 中我们有:

$scope.$broadcast('事件名称', 数据)

$scope.$on('事件名称', () => {})

但我将向您展示普通 js,以便您可以了解它在幕后的工作原理。

https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events

我们希望将事件注册到窗口,甚至更好的是应该定位的元素。

const onDataFetched = new Event('on-kalender-fetched');
    
methods: {
   scrollTo() {
     // ScrollTo Element...
   }
},
        
        
asyncData({ env, params }) {
   return axios.get(`${env.cockpit.apiUrl}/collections/get/kalender`)
      .then(({data}) => {
         return {
           items
         }
       })
       .finally(items => window.dispatchEvent('on-kalender-fetched', items))
}
    

接下来我们要在您安装的函数中设置监听器,您需要避免超时,因为如果它们的连接速度较慢并且需要超过半秒,这样会更可靠。

 mounted() {
    window.addEventListener('on-kalender-fetched', () => this.scrollTo(), false);
 }

最后,我们希望在请求完成时使用 window 或 element.dispatchEvent('name-of-event', dataToSend) 调度事件

编辑:

vue 如何进行事件调度

this.$emit('myEvent')

Listening to the kebab-cased version will have no effect:

<my-component v-on:my-event="doSomething"></my-component>

https://v2.vuejs.org/v2/guide/components-custom-events.html

关于javascript - 如何滚动到 asyncData 之后的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52917468/

相关文章:

javascript - 将 latlng 写入计算机上的文件

vue.js - 在 Vue 组件中使用 @use "sass:math"

node.js - Nuxt - 服务器端的 Axios 请求不发送引荐来源网址

amazon-web-services - 是否可以在 AWS 上部署 Nuxt SSR 应用程序?

javascript - 从上到下淡入页面元素

javascript - 在一个 img 上使用 fancybox rel=group 和 jQuery img src 更改

javascript - 如何在按钮单击时有条件地以 Angular 加载组件

javascript - 从 HTML 中的 JavaScript 模块调用函数

vue.js - 托管应用程序后 npm run production 不起作用

node.js - 找不到页面 "/"路由