code: function advanceActivatedRoute(route) {
      if (route.snapshot) {
          var currentSnapshot = route.snapshot;
          var nextSnapshot = route._futureSnapshot;
          route.snapshot = nextSnapshot;
          if (!shallowEqual(currentSnapshot.queryParams, nextSnapshot.queryParams)) {
              route.queryParams.next(nextSnapshot.queryParams);
          }
          if (currentSnapshot.fragment !== nextSnapshot.fragment) {
              route.fragment.next(nextSnapshot.fragment);
          }
          if (!shallowEqual(currentSnapshot.params, nextSnapshot.params)) {
              route.params.next(nextSnapshot.params);
          }
          if (!shallowEqualArrays(currentSnapshot.url, nextSnapshot.url)) {
              route.url.next(nextSnapshot.url);
          }
          if (!shallowEqual(currentSnapshot.data, nextSnapshot.data)) {
              route.data.next(nextSnapshot.data);
          }
      }
      else {
          route.snapshot = route._futureSnapshot;
          // this is for resolved data
          route.data.next(route._futureSnapshot.data);
      }
  }
docs: The expectation is that the activate route is created with the right set of parameters.
  So we push new values into the observables only when they are not the initial values.
  And we detect that by checking if the snapshot field is set.