#vue.js #nuxt.js #vuetify.js #vue-router
#vue.js #nuxt.js #vuetify.js #vue-маршрутизатор
Вопрос:
У меня есть кнопка входа в систему, которая будет переходить к маршруту dashboard/
при успешном входе в систему. Кнопка работает при нажатии, но когда я нажимаю клавишу ввода, она дублирует маршрут.
Итак, поток такой:
- Перейдите на страницу входа
- Нажмите клавишу «Ввод»
- Перейдите к «Панели мониторинга»
- Нажмите кнопку возврата браузера
- Нажмите клавишу «Ввод»
В этот момент адрес становится http://localhost:3000/dashboard/dashboard/
вместо просто http://localhost:3000/dashboard/
. Что еще более странно, так это то, что если я следую тому же потоку, что и выше, но вместо этого нажимаю кнопку. Он работает так, как ожидалось, независимо от того, сколько раз я нажимаю кнопку «Назад». Разделенный компонент показан ниже.
<template >
<v-container>
<v-row justify="center">
<v-col cols='6' align="center">
<v-form>
<h1 class="pb-4">Login</h1>
<v-text-field
label="Email"
placeholder="someone@example.com"
>
</v-text-field>
<v-text-field
label="Password"
type="password"
>
</v-text-field>
<v-btn dark block @click="login"> Login </v-btn>
<br />
<a href="">Forgot your password?</a>
</v-form>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
data() {
return {
showPassword: false,
};
},
mounted(){
document.addEventListener("keyup", (event) => {
if (event.key ==='Enter') {
this.login();
}
});
},
methods: {
async login() {
try {
//throw 'Login is not setup'
//do login logic
this.$router.push({ path: "dashboard/" });
} catch (error) {
console.error(error);
}
},
},
};
</script>
<style>
</style>
Ответ №1:
Я думаю, ваша проблема заключается в том, как у вас настроено событие с помощью прослушивателя событий, который вам технически не нужен, поскольку родным и нормальным поведением для формы является отправка при вводе. Вместо того, чтобы иметь событие щелчка на вашей кнопке, используйте тип кнопки отправки и поведение по умолчанию для предотвращения в форме, чтобы перехватить обычную отправку формы и вместо этого запустить функцию отправки. Затем это должно работать так же, как при нажатии кнопки или нажатии enter.
Шаблон:
<form @submit.prevent="login()">
<button type="submit">submit</button>
</form>
export default {
methods: {
login() {
// stuff you want to do
},
}
У Vuetify должны быть способы настройки его свойств, чтобы они выполняли то же самое, что и ванильные формы. Но идея должна работать так же.
Комментарии:
1. Это работает! за исключением того, что новый URL становится
http://localhost:3000/dashboard/?
, который все равно будет переходить на нужную страницу, но все же2. Весело. Возможно, где-то есть какой-то код, который считает, что он должен добавлять какие-то параметры к вашему URL. Возможно, загляните в настройки маршрутизации, чтобы отладить этот бит.
3. Или, никогда не знаешь, может быть, в Vuetify (если это то, что вы там используете) есть что-то, что они подкрадывают, что вам нужно отключить с помощью какой-то опоры. Я полагаю, благословения и проклятия пакетов и платформ.
4. Извиняюсь, он работает безупречно. Я забыл удалить
@click
обработчик с кнопки5. Хорошая сделка! Рад, что смог помочь. 🙂