首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在值更改监视器中通过$router.push导航时,Vue scrollBehavior不起作用

在值更改监视器中通过$router.push导航时,Vue scrollBehavior不起作用
EN

Stack Overflow用户
提问于 2021-04-07 00:45:48
回答 1查看 42关注 0票数 0

当我通过routerLink或$router.push导航到另一个页面时,scrollBehavior工作正常。但是,当我尝试通过更改位于主页中心的输入框的输入值触发的观察器导航到同一页面时,scrollBehavior不起作用。相反,它获取新导航页面底部的位置。即使我不使用scrollBehavior,它也是一样的。

现在我的问题是,如何通过输入值更改监视器到达导航的“关于”页面的顶部?

HeadSearch组件:

代码语言:javascript
复制
<template>
  <div class="search">
    <input type="text" v-model="tx" />
    <p>{{ tx }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tx: "",
    };
  },
  watch: {
    tx() {
      if (this.$route.path !== "/about") {
        this.$router.replace("/about");
      }
    },
  },
};
</script>

App.vue:

代码语言:javascript
复制
<template>
  <div id="app">
    <div id="nav">
      <router-link to="/">Home</router-link> |
      <router-link to="/about">About</router-link>
      <br /><br />
      <head-search></head-search>
      <br /><br />
    </div>
    <router-view />
  </div>
</template>

<script>
import HeadSearch from "./components/HeadSearch.vue";
export default {
  components: {
    HeadSearch,
  },
};
</script>

Home.vue:

代码语言:javascript
复制
<template>
  <div class="home">
    <h1>This is Home page</h1>
    <br /><br /><br />
    <input class="home-input" type="text" v-model="hTx" />
  </div>
</template>

<script>
export default {
  name: "Home",
  data() {
    return {
      hTx: "",
    };
  },
  watch: {
    hTx() {
      if (this.$route.path !== "/about") {
        this.$router.push("/about");
      }
    },
  },
};
</script>

About.vue:

代码语言:javascript
复制
<template>
  <div class="about">
    <h1>This is an about page</h1>
    <br /><br /><br /><br /><br />
    <div v-for="(cont, index) in 30" :key="index">
      {{ cont }} {{ index }}
      <p>Lorem ipsum dolor sit amet.</p>
    </div>
  </div>
</template>

router.js:

代码语言:javascript
复制
const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes,
  scrollBehavior(){
    return {
      x: 0,
      y: 0
    }
  }
})
EN

回答 1

Stack Overflow用户

发布于 2021-04-07 02:32:57

您可以在scrollTop中使用Javascript或定义scrollTop或jQuery关于组件方法,并调用中的方法关于组件的挂载<>e211挂钩。

使用Javascript或jQuery,您可以定义一个id、类或元素,以便在挂载关于组件时滚动到该元素。

例如id="scrollTarget"

代码语言:javascript
复制
<template>
    <div class="about" id="scrollTarget">
        <h1>This is an about page</h1>
        <br /><br /><br /><br /><br />
        <div v-for="(cont, index) in 30" :key="index">
            {{ cont }} {{ index }}
            <p>Lorem ipsum dolor sit amet.</p>
        </div>
    </div>
</template>


<script>
export default {
    methods: {
        scrollToTop() {
            // using Javascript
            document.getElementById("scrollTo").scrollIntoView({ behavior: "smooth" })
            // OR
            // using jQuery
            $("html, body").animate({scrollTop: 600}, "slow")
        }
    },
    mounted() {
        this.scrollToTop();
    }
}
</script>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66972947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档