#javascript #vue.js
Вопрос:
Хорошо, итак, я делаю проект laravel vue js, и я хочу передать ссылку в методе (код ниже). по щелчку div я хочу перейти на сайт (www.google.com ), как показано ниже. Я пробовал некоторые решения, приведенные в похожих сообщениях здесь, но безуспешно.
<template>
<div style="cursor:pointer;" @mouseover="showMe" @mouseout="hideMe" @click="goToMySite">
<h6 v-show="goTolink === false">Hover Me</h6>
<h6 v-show="goToLink === true"> Click to visit My Site </h6>
</div>
</template>
<script>
export default {
props: [],
data() {
return {
goTolink: false,
}
},
methods: {
showMe(){
this.goTolink = true
},
hideMe(){
this.goTolink = false
},
goToMySite(){
href='http://www.google.com'
}
}
}
</script>
<style>
</style>
Ответ №1:
В вашем коде есть несколько проблем.
- Слушатели не в лучшем месте. Установив его в родительском контейнере, ссылка никогда не появится, потому что ее родительский элемент больше не отображается.
- Вы должны использовать
mouseenter
/mouseleave
вместоmouseover
/mouseout
, который вызывает много ненужных событий - Вы должны использовать
v-if
/v-else
вместоv-show
этого в таком варианте использования. href
не существует в вашемgoToMySite
методе
Вот рабочий пример :
<template>
<div style="cursor:pointer;">
<h6 v-if="! goTolink"
@mouseenter="showMe">Hover Me</h6>
<h6 v-else
@mouseleave="hideMe"
@click="goToMySite">Click to visit My Site</h6>
</div>
</template>
<script>
export default {
props: [],
data() {
return {
goTolink: false,
href: 'https://www.google.com'
}
},
methods: {
showMe() {
this.goTolink = true
},
hideMe() {
this.goTolink = false
},
goToMySite() {
// Do what you want here, for example
window.open(this.href, '_blank');
}
}
}
</script>
И фрагмент (window.open здесь не работает, но в обычном файле все в порядке) :
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
</head>
<body>
<div id="app">
<div style="cursor:pointer;">
<h6 v-if="! goTolink"
@mouseenter="showMe">Hover Me</h6>
<h6 v-else
@mouseleave="hideMe"
@click="goToMySite">Click to visit My Site</h6>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script>
new Vue({
el: '#app',
data: {
goTolink: false,
href: 'https://www.google.com'
},
methods: {
showMe() {
this.goTolink = true
},
hideMe() {
this.goTolink = false
},
goToMySite() {
// Do what you want here, for example
console.log(`Let's visit ${this.href}`);
window.open(this.href, '_blank');
}
}
})
</script>
</body>
</html>
Кстати, несколько советов :
- Не используйте встроенный стиль
- Если вы не хотите обрабатывать различия между
false
,null
иundefined
, вы можете проверить, не существует ли значение с помощью! value
(и толькоvalue
если вы хотите знать, определена ли переменная) - Возможно, здесь было бы более уместно использовать
a
тег для вашей ссылки (и оформить его так, чтобы он выглядел как вашh6
)
Вы также можете обработать изменение goToLink
значения некоторыми другими способами (но это субъективный выбор). Например, в шаблоне (чтобы вы могли удалить методы showMe
и hideMe
) :
<h6 v-if="! goTolink"
@mouseenter="goTolink = true">Hover Me</h6>
<h6 v-else
@mouseleave="hideMe"
@click="goTolink = false">Click to visit My Site</h6>
или
<h6 v-if="! goTolink"
@mouseenter="goTolink = ! goTolink">Hover Me</h6>
<h6 v-else
@mouseleave="hideMe"
@click="goTolink = ! goTolink">Click to visit My Site</h6>
или сохранить только один метод для переключения :
<h6 v-if="! goTolink"
@mouseenter="toggleLink">Hover Me</h6>
<h6 v-else
@mouseleave="toggleLink"
@click="toggleLink">Click to visit My Site</h6>
methods: {
toggleLink() {
this.goTolink = ! this.goTolink;
}
}
Ответ №2:
Используйте location
объект window
.
goToMySite(){
window.location.href='http://www.google.com'
}