Vue scrollBehavior не работает, когда я просматриваю $ router.push в наблюдателе изменения значения

Когда я перехожу на другую страницу с помощью routerLink или $ router.push scrollBehavior работает нормально. Но когда я пытаюсь перейти на ту же страницу наблюдателем, который запускается изменением значения ввода поля ввода, расположенного в центре домашней страницы, scrollBehavior не работает. Скорее он получает позицию внизу новой страницы, по которой осуществляется навигация. Даже если я не использую scrollBehavior, он делает то же самое.

Теперь мой вопрос: как мне добраться до верхней части страницы «О программе» с помощью наблюдателя, изменяющего входное значение?

Компонент HeadSearch:

<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:

<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:

<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:

<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:

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes,
  scrollBehavior(){
    return {
      x: 0,
      y: 0
    }
  }
})

Пожалуйста, покажите вашу конфигурацию scrollBehavior в настройках вашего роутера.

tony19 07.04.2021 07:18

я только что добавил. посмотри на дно

Abeer 07.04.2021 13:57
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
18
1

Ответы 1

Вы можете определить scrollTop или scrollIntoView с помощью Javascript или jQuery в вашем компоненте Ометоды и вызвать метод в хуке установленный вашего компонента О.

Используя Javascript или jQuery, вы можете определить я бы, класс или элемент для прокрутки при монтировании компонента О.

например, id = "scrollTarget"

<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>

это не сработало, братан

Abeer 07.04.2021 16:54

Я только что обнаружил, что асинхронная прокрутка в scrollBehavior решает проблему

Abeer 07.04.2021 16:55

Другие вопросы по теме