2015-02-14 10 views

risposta

6

non ho trovato come farlo in modo corretto, ma lo si può fare con la creazione di una direttiva e un evento, come:

.directive('testDragEnd', function() { 
    return { 
     restrict: 'A', 
     link: function(scope, element, attrs) { 
      element.on('$md.dragend', function() { 
       console.info('Drag Ended'); 
      }) 
     } 
    } 
}) 

E la, si deve aggiungere la direttiva in the <md-slider>. (<md-slider test-drag-end></md-slider>).

Spero che sia d'aiuto.

In hub git di angolare Materiale Ci sono pochi altri eventi in cui è possibile fare lo stesso:

https://github.com/angular/material/blob/952ee3489e84226c73f83db15f8586db93cdca19/src/components/slider/slider.js

element 
     .on('keydown', keydownListener) 
     .on('$md.pressdown', onPressDown) 
     .on('$md.pressup', onPressUp) 
     .on('$md.dragstart', onDragStart) 
     .on('$md.drag', onDrag) 
     .on('$md.dragend', onDragEnd); 
+1

Questa è una buona soluzione per il problema descritto qui: https://github.com/angular/material/issues/2060 Voglio rispondere alle modifiche sul mio dispositivo di scorrimento con una richiesta HTTP, e voglio solo che succeda alla fine del trascinamento, non una volta per ogni cambio di modello. Ascoltare l'evento '$ md.pressup' sembra un buon modo per risolvere questo problema. – chazzlabs

+2

L'evento $ md.pressup che hai menzionato è probabilmente più appropriato di $ md.dragend. L'evento $ md.dragend viene visualizzato solo se il cursore è in realtà un farmaco da parte dell'utente: se fanno clic per cambiare e non trascinano, il trascinamento non viene mai attivato (tuttavia $ md.pressup). Dato che l'OP vuole sapere ogni volta che viene modificato un valore, $ md.dragend non funzionerà sempre. – kpup

1

ho usato un $ orologio sulla variabile legato al dispositivo di scorrimento:

$scope.$watch(
    function() { 
     return $scope.tex; 
    }, 
    function(newValue, oldValue) { 
     $mdToast.show($mdToast.simple().content("Slider=" + newValue).position("top right").hideDelay(1500)); 
    }); 

Nel mio caso il mio HTML si presentava così:

<md-slider min="0" max="50" ng-model="tex" md-discrete></md-slider> 

Good Luck.

1

ho messo una funzione di callback in ng-blur, che ha lavorato per me. (Provato inizialmente con il ng-change, ma è diventato molto lento).

Esempio:

<md-slider ng-model="gigabyte" ng-blur="myCallbackFunction()" id="myslider"> </md-slider> 
<input flex type="number" ng-model="gigabyte" ng-blur="myCallbackFunction()" aria-controls="myslider"> 
8

è possibile aggiungere ng-cambiamento sulla direttiva

<md-slider min="0" max="50" ng-model="text" ng-change="myMethod()" md-discrete></md-slider> 
+0

Sei sicuro che questo funziona! – M98

+0

Funziona in Angolare 1.6.4 con materiale angolare 1.1.4 –

0

ng-mouseup dovrebbe fare il trucco. Se vuoi aggiungere la logica (come ho fatto io) per assicurarti che il tuo valore sia cambiato prima di effettuare l'aggiornamento della chiamata db, puoi aggiungerlo all'interno della tua funzione saveChanges() all'interno del tuo controller.

<md-slider ng-mouseup="vm.saveChanges(vm.myModel)"></md-slider>

Problemi correlati