Desplazamiento suave angular2

Tengo problemas para conseguir que un servicio de desplazamiento suave funcione en angular 2. ¿Hay algún servicio para el desplazamiento suave, o el desplazamiento de anclaje simple, que pueda funcionar hasta que el equipo angular 2 obtenga el equivalente $ anchorScroll angular2 funcionando?

Hasta ahora acabo de intentar:

Configuración * ng Para la identificación incremental del bucle en un div padre

[attr.id]="'point' + i"

Llamar un scrollto en un botón con la identificación pasada

<button 
     type="button" 
     class="btn btn-lg btn-default " 
     (click)="smoothScroll('point'+i)">
           Scroll to point
</button>

Y en el componente asociado, estoy tratando de implementar una función de desplazamiento suave js simple

smoothScroll(eID) {
        var startY = currentYPosition();
        var stopY = elmYPosition(eID);
        var distance = stopY > startY ? stopY - startY : startY - stopY;
        if (distance < 100) {
            scrollTo(0, stopY); return;
        }
        var speed = Math.round(distance / 100);
        if (speed >= 20) speed = 20;
        var step = Math.round(distance / 25);
        var leapY = stopY > startY ? startY + step : startY - step;
        var timer = 0;
        if (stopY > startY) {
            for (var i = startY; i < stopY; i += step) {
                setTimeout(this.win.scrollTo(0, leapY), timer * speed);
                leapY += step; if (leapY > stopY) leapY = stopY; timer++;
            } return;
        }
        for (var i = startY; i > stopY; i -= step) {
            setTimeout(this.win.scrollTo(0,leapY), timer * speed);
            leapY -= step; if (leapY < stopY) leapY = stopY; timer++;
        }
    }
function currentYPosition() {
    // Firefox, Chrome, Opera, Safari
    if (self.pageYOffset) return self.pageYOffset;
    // Internet Explorer 6 - standards mode
    if (document.documentElement && document.documentElement.scrollTop)
        return document.documentElement.scrollTop;
    // Internet Explorer 6, 7 and 8
    if (document.body.scrollTop) return document.body.scrollTop;
    return 0;
}
function elmYPosition(eID) {
    var elm = document.getElementById(eID);
    var y = elm.offsetTop;
    var node = elm;
    while (node.offsetParent && node.offsetParent != document.body) {
        node = node.offsetParent;
        y += node.offsetTop;
    } return y;
}

También estoy tratando de dar acceso a la ventana para this._win.scrollTo que proviene de un servicio de proveedor de ventanas

import {Injectable, Provider} from 'angular2/core';
import {window} from 'angular2/src/facade/browser';
import {unimplemented} from 'angular2/src/facade/exceptions';

function _window(): Window {
  return window
}

export abstract class WINDOW {
  get nativeWindow(): Window {
    return unimplemented();
  }
}

class WindowRef_ extends WINDOW {
  constructor() {
    super();
  }
  get nativeWindow(): Window {
    return _window();
  }
}

export const WINDOW_PROVIDERS = [
  new Provider(WINDOW, { useClass: WindowRef_ }),
];

** EDITAR --------------------- **

Cambié this.win.scrollTo a this.win.window.scrollTo y ahora obtengo un efecto similar a angular1.x $ anchorscroll donde el desplazamiento es rápido en lugar de una transición suave, pero el desplazamiento no es suave y Recibo el siguiente error de excepción.

ACTUALIZAR

Ya no obtengo ese error después de descubrir que angular2 está haciendo setTimeout un poco diferente, pero el desplazamiento sigue siendo instantáneo y no es un desplazamiento suave.

Cambié

  setTimeout(this.win.scrollTo(0, leapY), timer * speed);

a

 setTimeout(() => this.win.scrollTo(0, leapY), timer * speed);

Respuestas a la pregunta(9)

Su respuesta a la pregunta