<!DOCTYPE html>
<html>

  <head>
    <link data-require="bootstrap-css@3.3.6" data-semver="3.3.6" rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.css" />
    <script data-require="angular.js@1.5.8" data-semver="1.5.8" src="https://code.angularjs.org/1.5.8/angular.js"></script>
    <script data-require="angular-ui-router@0.2.10" data-semver="0.2.10" src="//cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.10/angular-ui-router.js"></script>
    <script data-require="angular-breadcrumb" src="https://rawgit.com/collabo-br/angular-breadcrumb/develop/dist/angular-breadcrumb.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

  <body ng-app="app">
    <div ncy-breadcrumb-dynamic-chain ></div>
    <div ui-view=""></div>
  </body>

</html>
angular.module('app', ['ui.router', 'ncy-angular-breadcrumb'])
.config([
  '$stateProvider', 
  '$urlRouterProvider',  
  '$breadcrumbProvider',
  function ($stateProvider, $urlRouterProvider, $breadcrumbProvider){
  
    $stateProvider.state('home', {
      url: '/home',
      templateUrl: 'home.html',
      ncyBreadcrumb: {
        label: 'Home'
      }
    })
    .state('category', {
      url: '/cat/:id',
      templateUrl: 'category.html',
      controllerAs: 'ctrl',
      controller: ['$injector', function($injector){
        var $stateParams = $injector.get('$stateParams');
        
        
        this.isSubCategory = $stateParams.id > 1;
        this.title = 'Category ' + $stateParams.id;
        
      }],
      ncyBreadcrumb: {
        dynamicStatesChain : function($injector){
          var $q = $injector.get('$q');
          var $timeout = $injector.get('$timeout');
          var $stateParams = $injector.get('$stateParams');
          
          var deferred =  $q.defer();
          var steps = [];
          
          if ($stateParams.id == 1){
            $timeout(function getSteps() {
              steps.push({ 
                label : 'Category 1',
                state : 'category({id:1})'
                });
                
              deferred.resolve(steps);
            }, 300);
          }else{
            $timeout(function getSteps() {
              steps.push(
                { 
                label : 'Category 2',
                state : 'category({id:2})'
                },
                { 
                label : 'Category 1',
                state : 'category({id:1})'
                });
                
              deferred.resolve(steps);
            }, 300);
          }
          
          
          return deferred.promise;
          
          
        }
      }
    })
    .state('product', {
      url: '/product',
      templateUrl: 'product.html',
      ncyBreadcrumb: {
         dynamicStatesChain : function($injector){
          var $q = $injector.get('$q');
          var $timeout = $injector.get('$timeout');
          var $stateParams = $injector.get('$stateParams');
          
          var deferred =  $q.defer();
          var steps = [];
          
          
          $timeout(function getSteps() {
            steps.push(
              { 
                label : 'Product',
                state : 'product'
              },
              { 
                label : 'Category 2',
                state : 'category({id:2})'
              },
              { 
                label : 'Category 1',
                state : 'category({id:1})'
              });
                
              deferred.resolve(steps);
            }, 300);
          
          
          
          return deferred.promise;
        }
      }
    });
    
    $urlRouterProvider.otherwise('/home');
    
    
    $breadcrumbProvider.setOptions({
        prefixStateName: 'home',
        template: 'bootstrap3'
    });
  
  }
]);



/* Styles go here */

<div >
  <h2>Home view</h2>
  <p><a ui-sref="category({id : 1})">Category 1</a></p>
  
</div>
<div ui-view=""></div>

<div>
  <h2>{{ ctrl.title}} View </h2>
  
  <p ng-if="ctrl.isSubCategory"><a ui-sref="product">Product</a></p>
  <p  ng-if="!ctrl.isSubCategory"><a ui-sref="category({id : 2})">Sub-category</a></p>
</div>

<div>
  <h2>Product view</h2>
  
</div>