diff --git a/src/components/button/button.vue b/src/components/button/button.vue index 76e0fce..d2c7be0 100644 --- a/src/components/button/button.vue +++ b/src/components/button/button.vue @@ -5,7 +5,9 @@ :disabled="disabled" :href="linkUrl" :target="target" - @click="handleClickLink"> + @click.exact="handleClickLink($event, false)" + @click.ctrl="handleClickLink($event, true)" + @click.meta="handleClickLink($event, true)"> @@ -99,10 +101,11 @@ } }, methods: { - handleClickLink (event) { + // Ctrl or CMD and click, open in new window when use `to` + handleClickLink (event, new_window) { this.$emit('click', event); - this.handleCheckClick(event); + this.handleCheckClick(event, new_window); } }, mounted () { diff --git a/src/mixins/link.js b/src/mixins/link.js index c1ca187..e2ff4d8 100644 --- a/src/mixins/link.js +++ b/src/mixins/link.js @@ -24,21 +24,25 @@ export default { } }, methods: { - handleClick () { - const isRoute = this.$router; - if (isRoute) { - this.replace ? this.$router.replace(this.to) : this.$router.push(this.to); + handleClick (new_window = false) { + if (new_window){ + window.open(this.to); } else { - window.location.href = this.to; + const isRoute = this.$router; + if (isRoute) { + this.replace ? this.$router.replace(this.to) : this.$router.push(this.to); + } else { + window.location.href = this.to; + } } }, - handleCheckClick (event) { + handleCheckClick (event, new_window = false) { if (this.to) { if (this.target === '_blank') { return false; } else { event.preventDefault(); - this.handleClick(); + this.handleClick(new_window); } } } -- libgit2 0.21.4