Index
以下のコードでリンクをクリックしてもなぜか何も起こらない
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<script setup lang="ts"> import {ref} from 'vue'; let link = ref('https://google.com/') function onClick(){ link.value = 'https://yahoo.co.jp/' } </script> <template> <a :href= "link" target="_blank" > link </a> <button @click="onClick">change link</button> </template> |
以下のようにコードを変更すればOK
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<script setup lang="ts"> import { ref } from 'vue'; let link = ref('https://google.com/'); function openLink() { window.open(link.value, '_blank'); } function onClick() { link.value = 'https://yahoo.co.jp/'; } </script> <template> <a href="#" @click="openLink">link</a> <button @click="onClick">change link</button> </template> <style scoped> </style> |
Vue.jsのテンプレート内では、href
属性に変数をバインドする場合、Vueのリアクティブシステムが変数の変更を監視し、変更があったときに自動的に要素の属性を更新します。しかし、target="_blank"
を使用して新しいウィンドウまたはタブでリンクを開こうとすると、ブラウザがポップアップブロックをトリガーする可能性があるため、リンクが動作しないことがあります。
この問題を解決するためには、<a>
要素のhref
属性を動的に変更する際に、ブラウザのポップアップブロックを回避するための方法を追加する必要があります。具体的な方法は、次のようにwindow.open()
メソッドを使用して新しいウィンドウまたはタブを開くことです。