A Vue directive that parses child elements for internally linking anchor tags and binds their click events to use Vue Router's push().
yarn add vue-routing-anchor-parser
or npm install --save vue-routing-anchor-parser
In a your bootstrapping JS:
parseAnchors = require('vue-routing-anchor-parser')
directive.settings({
addBlankToExternal: false,
internalUrls: [
/^https?:\/\/localhost:\d+/
/^https?:\/\/([\w\-]+\.)?netlify\.com/
/^https?:\/\/([\w\-]+\.)?bukwild\.com/
]
internalHosts: [
'localhost',
'example.com',
]
})
Vue.directive('parse-anchors', parseAnchors)
In nuxt.config.js
:
modules: [
'vue-routing-anchor-parser/nuxt/module',
],
anchorParser: {
addBlankToExternal: true,
internalUrls: [
/^https?:\/\/localhost:\d+/,
/^https?:\/\/([\w\-]+\.)?netlify\.com/,
/^https?:\/\/(www\.)?bukwild\.com/,
],
internalHosts: [
'localhost',
'bukwild.com',
],
externalPaths: [
/^\/react-landing-page/,
],
sameWindowUrls: [
/^https?:\/\/(shop\.)?bukwild\.com/,
],
disableSmartLinkRegistration: false,
}
addBlankToExternal
: Set to true to addtarget='_blank'
to external linksinternalUrls
: Array of regexes that, when found inhref
attributes, get treated as internal links.internalHosts
: Array of host names that, when found inhref
attributes, get treated as internal links. These are checked afterinternalUrls
.externalPaths
: Array of regexes that, when found inhref
attributes, get treated as external links. Useful for sections of your website that are not part of this Vue/Nuxt app.sameWindowUrls
: Array of regexes that are checked when a URL is not internal. If there is a match, the URL opens in the same window rather opening a new window.disableSmartLinkRegistration
: Set to true to prevent the auto registration ofsmart-link
Add v-parse-anchors
wherever you want to parse child anchors for internal links and route clicks through Vue Router. href
s that begin with a slash, like <a href='/path/to/something'>
are treated as internal automatically. If an internal route can't be resolved by Vue Router, it falls back to a full page refresh (though never opens in a new window.)
The smart-link
component conditionally renders a nuxt-link
if an internal link or an a
tag if not.
<smart-link to='https://www.bukwild.com'>Bukwild</smart-link>
- This currently only parses on
bind
, meaning if the contents for the element change later, newa
tags won't be processed.