2016-02-11 16 views
7

Próbuję użyć suwaka Jquery-ui z angleular2. Chciałbym, aby zmienna "slideValue" wyświetlała wartość suwaka, ale nie mogę wymyślić, jak powiązać mój model lub zmienną z kątowego do suwaka. Oto mój komponent suwaka:Angular2 z Jquery-ui Slider

import {Component, ElementRef, Inject, OnInit} from 'angular2/core'; 

declare var jQuery:any; 

@Component({ 
    selector: 'slider', 
    template: 
    ` 
    <input type="text" [(ngModel)]="slideValue" id="amount" required placeholder="Enter a name here"> 
    <div id="slider"></div> 
    <h2>slideValue = {{slideValue}}</h2> 
    ` 
}) 

export class Slider implements OnInit { 
    elementRef: ElementRef; 
    slideValue: number; 

    constructor(@Inject(ElementRef) elementRef: ElementRef) { 
     this.elementRef = elementRef; 
    } 

    ngOnInit() {   
     jQuery(this.elementRef.nativeElement).find("#slider").slider({ 
      range: false, 
      orientation: "vertical", 
      min: 0, 
      max: 100, 
      value: 60, 
      slide: function(event, ui) { 
      this.slideValue = ui.value; //doesn't seem to work 
      $("#amount").val(ui.value); 
      } 
     }); 

    } 
} 

Kod jest dostępny tutaj:

https://github.com/nerg/slider

chciałbym móc używać „pionowy suwak” z Angular2, więc jeśli jeszcze opłacalne rozwiązanie istnieje , Jestem zainteresowany (sprawdziłem materiał, ale nie wydaje się on być "kątowy2" gotowy i tylko poziomy suwak).

+0

Zobacz PrimeNG Slider jako odniesienie. http://www.primefaces.org/primeng/#/slider –

+0

Dokładnie to, czego szukałem. Szukam trochę czasu, ale nigdy nie znajduję tej strony. Dzięki. – Nerg

+0

Od bieżącego wydania ng2 0.2.0 (odpowiadającego rc4), właściwość suwaka musi zostać zdefiniowana (null jest w porządku), podczas gdy poprzednie wersje formularzy ng2 pozwalają również na niezdefiniowanie wartości. Pojawiło się, gdy migałem z demo aplikacji PrimeNG ng2 do rc4, aby zobaczyć, co się zepsuło, a rozpoczęcie przeciągania suwaka o niezdefiniowanej wartości początkowej zaczęło rzucać wyjątki. – rob3c

Odpowiedz

5

Musisz użyć właściwego kontekstu (this) wewnątrz wywołania zwrotnego slajdów. Strzałka funkcja rade w tym przypadku:

@Component({ 
    selector: 'slider', 
    template: ` 
     <input type="text" [(ngModel)]="slideValue" class="amount" required placeholder="Enter a name here"> 
     <div class="slider"></div> 
     <h2>slideValue = {{slideValue}}</h2> 
    ` 
}) 
export class Slider implements OnInit { 
    elementRef: ElementRef; 
    slideValue: number; 

    constructor(@Inject(ElementRef) elementRef: ElementRef) { 
     this.elementRef = elementRef; 
    } 

    ngOnInit() { 
     var $amount = jQuery(this.elementRef.nativeElement).find(".amount"); 
     jQuery(this.elementRef.nativeElement).find(".slider").slider({ 
      range: false, 
      orientation: "vertical", 
      min: 0, 
      max: 100, 
      value: 60, 
      slide: (event, ui) => { 
       this.slideValue = ui.value; 
       $amount.val(ui.value); 
      } 
     }); 
    } 
} 
+0

Wielkie dzięki! To działa naprawdę dobrze. – Nerg

0

szukałem czegoś podobnego i natknąłem się na to:

https://www.npmjs.com/package/ng2-slider-component

Nie 100% dopracowana i github aktywność tyłu wygląda cienkie, ale najbliżej rodzimego elementu kątowego2, który wydaje się istnieć w momencie pisania tego tekstu.