2016-09-12 12 views
14

zauważyłem, że nie można używać w kątowym 2 składników bootstrap funkcji jak data-spy="affix"Jak korzystać Scrollspy i umieszcza w kątowa 2

Czy ktoś wie, jak używać przyrostek i scrollspy w kątowym 2? (Example)

+1

użyj tego, wciąż próbuję dowiedzieć się, jak używać z nim afixu, https://www.npmjs.com/package/ng2-scrollspy –

+0

Czy udało Ci się ustawić afix z angular2? Stoję w obliczu tego samego "problemu". – Ben

+0

@Ben Właśnie utworzyłem usługę ze zdarzeniem podczas przewijania i dyrektywą, która ustawia styl elementu na podstawie pewnej logiki. Chciałbym się nim podzielić, ale nie mam już kodu. Prawdopodobnie możesz również użyć tego: https://www.npmjs.com/package/ng2-page-scroll, wystarczy pogrubić element na przewijaniu, prawdopodobnie nie jestem pewien –

Odpowiedz

5

Możesz napisać swoją małą dyrektywę, która zrobiłaby to samo. Dzielę mój kod:

dyrektywa:

@Directive({ 
selector: '[scrollPoint]' 
}) 
export class ScrollPointDirective { 
    @Input() scrollPoint: number; 
    constructor(
    @Inject(DOCUMENT) private document: Document, 
    private renderer: Renderer, 
    private el: ElementRef 
) { } 

    @HostListener('window:scroll', []) 
    onWindowScroll() { 
     const windowScroll = this.document.body.scrollTop; 
     if (windowScroll > this.nsgScrollPoint) { 
     //add class to the native element 
     this.renderer.setElementClass(this.el.nativeElement, 'sticky-nav', true); 
     } else { 
     //remove class from native element 
     this.renderer.setElementClass(this.el.nativeElement, 'sticky-nav', false); 
     } 

    } 

} 

Parametr @Input ScrollPoint mogą być przekazywane z HTML

HTML:

<div [scrollPoint]="235"> 
    <ul class="nav-stacked"> 
     //your code 
    </ul> 
</div> 

Dodaj CSS do klasy dodanej w dyrektywie:

CSS

.sticky-nav { 
    position: sticky; 
    top: 90px; 
    bottom: 0; 
} 

I nie były w stanie zintegrować umieszcza na angular2 jak dobrze, ale to nie dla mnie. Mam nadzieję, że to pomaga.

1

Nie potrzebujesz dyrektywy, aby to działało (Angular 5.0).

1) Upewnij się, bootstrap 3 jest załadowany <script src="assets/js/bootstrap.min.js"></script>

2) należy zidentyfikować element przelewowy gdzie zwój jest widoczny. <aside class="affix-mc" data-spy="affix" data-target=".main-body" data-offset-top="20">

O ile pasek przewijania jest pochodzi z window, trzeba określić data-target

3) tematyką elementu nieco, ex. &.affix { width: 180px }

Takie podejście działa nawet w przypadku stron osadzonych w urządzeniach potomnych routerów.