Giter Club home page Giter Club logo

vue-futurelink's Introduction

vue-futurelink

A vue component to preload links about to be clicked with futurelink.

Installation

$ npm install --save-dev vue-futurelink

Usage

Just load the component and output it into the page, and it will do the rest: it will set up the mouse tracking, hook into vue-router, and output a hidden element to the page. Relies on vue-router.

<template>
  <futurelink></futurelink>
</template>

<script>
  import Futurelink from 'vue-futurelink';

  export {
    components: {
      Futurelink
    }
  };
</script>

I put it below the footer, but in theory it should work anywhere on the page.

When a page is preloaded, a preload event is fired:

<template>
  <futurelink v-on:preload="handlePreload"></futurelink>
</template>

<script>
  import Futurelink from 'vue-futurelink';

  export {
    methods: {
      handlePreload(path, route) {
          console.info(`Preloading ${path}`, route);
      },
    },
    components: {
      Futurelink
    }
  };
</script>

Source vs. Dist

By default, the main entry points to the compiled and minified version of the Vue component. This is typically fine. However, in certain cases, perhaps using a PR or forked version of this package, you may need to import the source Vue component directly from the package. To do this, just append the import with the path to the Vue component:

import Futurelink from 'vue-futurelink/src/Futurelink';

Note: doing this requires that your build system is using vue-loader so it can compile the Vue SFC.

route.meta.preload

In some cases, actionable routes shouldn't be preloaded (i.e. /logout).

You can explicitly set the preload meta property of a route to false to prevent it from being preloaded:

{
  path: '/logout',
  // ...
  meta: {
    preload: false,
  },
},

In other cases, routes that can be resource intensive may need more complex handling to preload additional resources not typically associated with just mounting a vue component.

You can also supply the preload meta property with a callback function. This callback is passed two parameters:

  • path - (string) The link href value (stripped of any router base path).
  • route - (Route) The matched route object.

To prevent the route from being preloaded, the return value of the callback must explicitly return false. Optionally, a Promise may be returned that can ultimately be resolved to a boolean.

Note: Any errors or rejections encountered during the callback are intentionally caught as preloading is meant to be a passive and non-blocking feature. These errors will only be logged to the console if the Vue.config.silent option is disabled.

{
  path: '/process-intensive-route',
  // ...
  meta: {
    preload: (path, route) => startFetchingOtherResources(route),
  },
},

License

Released under the MIT license.

vue-futurelink's People

Contributors

callumacrae avatar markhalliwell avatar atrunelle avatar dependabot[bot] avatar brockreece avatar

Stargazers

Sam Wells avatar Diogo Terremoto avatar Kirill Groshkov avatar Máximo Mussini avatar Marton Lederer avatar Steven Brannum avatar DanCodes avatar Florian avatar  avatar Barthy avatar Yaro Schiffelers avatar Pavel Hlobil avatar Jan Bílek avatar  avatar Ofek Azulay avatar Daryn St. Pierre avatar Darren Jennings avatar  avatar Ruggero Castagnola avatar James Hale avatar Raihan Al-Mamun avatar Lance avatar Gabriel Campero Durand avatar Russell Daly avatar Brandon Bayer avatar Max Milton avatar Zafar Ansari avatar Cristian Pallarés avatar  avatar Gabriel Cueto avatar Chris Fritz avatar Niji avatar Franck Freiburger avatar Shaw avatar Eduardo San Martin Morote avatar  avatar

Watchers

Michael Cullum avatar  avatar James Cloos avatar  avatar Legzy27 avatar Gabriel Campero Durand avatar Ayman Alrifai avatar Bartosz Trzos avatar

vue-futurelink's Issues

More documentation

Love the idea of this plugin!
I got one problem, i don't know how to impement future-link.
Do i just replace all </router-link with ?

Maybe a example would help :)

Question about not running on mobile

I realize in the code you don't run the mounting logic if your on mobile. Is this because you don't want to preload links and potentially waste bandwidth on mobile? Or is there actually a piece of this code that won't work correctly on mobile devices?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.