code: function handleRouteChange( place, routerParameters, fragment ) {
        const parameters = { ...place.defaultParameters, ...routerParameters };
        const isSamePlace = activePlace && place.id === activePlace.id;
        const isSameFragment = fragment === activeFragment;
  
        if( isSamePlace && isSameFragment && equals( parameters, activeParameters ) ) {
           navigationInProgress = false;
           log.trace( `Canceling navigation to "${place.id}". Already there with same parameters.` );
           return Promise.resolve();
        }
        if( navigationInProgress ) {
           log.trace( `Canceling navigation to "${place.id}". Navigation already in progress.` );
           return Promise.resolve();
        }
        navigationInProgress = true;
  
        const fromPlace = activePlace ? activePlace.targets[ TARGET_SELF ] : '';
        const navigationTimer = timer.started( {
           label: `navigation (${fromPlace} -> ${place.targets[ TARGET_SELF ]})`,
           persistenceKey: SESSION_KEY_TIMER
        } );
  
        const event = {
           target: requestedTarget || place.id,
           place: place.id,
           data: parameters
        };
        if( fragment ) {
           event.fragment = fragment;
        }
        requestedTarget = null;
  
        const options = { sender: COLLABORATOR_ID };
        return eventBus.publish( `willNavigate.${event.target}`, event, options )
           .then( () => {
              if( activePlace && isSamePlace ) {
                 activeParameters = parameters;
                 activeFragment = fragment;
                 return Promise.resolve();
              }
  
              return pageService.controller().tearDownPage()
                 .then( () => {
                    log.setTag( 'PLCE', place.id );
                    activeParameters = parameters;
                    activeFragment = fragment;
                    activePlace = place;
                    return pageService.controller().setupPage( place.page );
                 } );
           } )
           .then( () => {
              navigationInProgress = false;
              navigationTimer.stopAndLog( 'didNavigate' );
              return eventBus.publish( `didNavigate.${event.target}`, event, options );
           } )
           .catch( err => {
              log.error( `Failed to navigate to place "${place.id}". Error: [0]\n`, err.stack );
              return Promise.reject( err );
           } );
     }
docs: /////////////////////////////////////////////////////////////////////////////////////////////////////////