npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ui-router-template-prefetch

v0.2.0

Published

A provider based on ui.router which prefetches all templates required by potentially following states.

Downloads

12

Readme

Build status Code climate Test coverage

Template Prefetch

A provider based on ui.router which prefetches all templates required by potentially following states.

Motivation

Using UI-Router you are encouraged to divide your application markup in small junks. This can result in quite a view files making up a single page. Those files obviously have to be fetched from the server which can lead to flickering during the rendering process. Of course you can help yourself by prefilling the template cache, but this usually means loading a single javascript file containing the markup for your whole application. In other words have to load markup you may not even need. This can cause rather long loading times which is definitely not what you want, especially on mobile devices.

Wouldn't it be cool to just load the markup you will need for the pages a user can view next? ui-router-template-prefetch lets you achieve this.

By defining which state B can follow a state A, ui-router-template-prefetch is able to load all markup that is needed to render state B while the user is still in state A. If state B is activated the markup is already there and the rendering will be smooth and quick.

Install

bower install --save ui-router-template-prefetch

or

npm install --save template-prefetch

## Documentation

In order to use template prefetching you have to define valid routes for your application state. This means you provide all the state transitions that are valid for your application. This is done by simple from('A').to('B') calls, where A and B are valid ui.router state names.
 
So, essentially, ui-router-template-prefetch has a complete state model of your application. In graph theoretical terms, the states from ui.router are the nodes and the from().to() calls represent the directed edges between nodes.
The state transitions are defined as follows:

```js
angular('myApp', ['template-prefetch'])
    .config(function (TemplatePrefetchProvider) {
        TemplatePrefetchProvider.from('start').to('overview').to('settings');
        TemplatePrefetchProvider.from('overview').to('details');
});

As you can see, multiple to() calls can be chained to a from() call. For API clarity it is not possible to chain a from() call to an to() call.

Query parameters syntax

At times you want to provide the template of a state not just as a static url but create it dynamically using a function. ui-router accepts functions as templateUrl property which gets a stateParams object as argument.

templateUrl: function ($stateParams) {
    return 'views/flow-step' + $stateParams.i + '.html';
}

In order to prefetch such templates you have to configure your from/to states with the query parameters the function needs to determine the url. There a two ways to achieve this:

angular('myApp', ['template-prefetch'])
   .config(function (TemplatePrefetchProvider) {
       // First syntax
       TemplatePrefetchProvider.from({name='start', stateParams={p: 1})
           .to({name='start', stateParams={p: 2});
       // Second syntax
       TemplatePrefetchProvider.from('start', {p: 1}).to('start', {p: 2});
});

TemplatePrefetch will call your templateUrl function and pass in the stateParams you configured in your routes. It will not pass in any other stateParams because it can not predict the future :).

It is important not note that stateParams are only necessary if they determine the actual template. Leave them out if stateParams are only used in your controllers as otherwise the prefetching will not work properly.

This is all you have to do. From now on ui-router-template-prefetch will fetch all templates and ng-includes for all to-states of a given from-state.