<!DOCTYPE html>
<html>
  <head>
    <script src="//unpkg.com/angular/angular.js"></script>
    <script src="//unpkg.com/@uirouter/angularjs/release/angular-ui-router.js"></script>
    <script src="script.js"></script>
    <title>Plunk demonstrating ui-router issue</title>
  </head>

  <body ng-app="demo">
    <a ui-sref="home">home</a>
    <a ui-sref="foo">home.foo</a>
    <a ui-sref="foo2">home.foo2</a><br/><br />
    <div ui-view />
  </body>
</html>
// Here's a skeleton app.  Fork this plunk, or create your own from scratch.
var app = angular.module('demo', ['ui.router']);

app.controller('foo', ['$transitions', '$q', '$timeout', function($transitions, $q, $timeout) {
            var self = this;

            self.doSomething = function() {
                var deferred = $q.defer();

                $timeout(function() {
                  deferred.reject("REJECT");
                }, 2000);

                return deferred.promise;
            }

            $transitions.onStart({from: 'foo' }, function() { 
              return self.doSomething();
            });
}]);

app.controller('foo2', ['$transitions', function($transitions) {
            var self = this;

            self.doSomething = function() {
                return false;
            }

            $transitions.onStart({from: 'foo2' }, function() { 
              return self.doSomething();
            });
}]);

app.controller('home', ['$transitions', function($transitions) {
}]);

// Define your example states here.
app.config(function($stateProvider, $urlRouterProvider) {
  
  $urlRouterProvider.otherwise('home')
  
  $stateProvider.state({ 
    name: 'home', 
    url: '/home', 
    template: 'Home',
    controller: 'home'
  });
  
  $stateProvider.state({ 
    name: 'foo', 
    url: '/foo', 
    template: 'foo',
    controller: 'foo'
  });

    $stateProvider.state({ 
    name: 'foo2', 
    url: '/foo2', 
    template: 'foo2',
    controller: 'foo2'
  });
});