2015-02-14 7 views

Antwort

6

konnte nicht gefunden werden, wie es in der richtigen Weise zu tun, aber Sie können es durch eine Richtlinie und das Erstellen eines Ereignisses, wie zB:

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

Und die haben Sie die Richtlinie hinzufügen in die <md-slider>. (<md-slider test-drag-end></md-slider>).

ich hoffe es hilft.

In scharfkantigem Material git Nabe gibt es nur wenige andere Veranstaltungen, bei denen Sie das gleiche tun:

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

Dies ist eine nette Lösung für das hier beschriebene Problem: https://github.com/angular/material/issues/2060 Ich möchte auf Änderungen auf meinem Slider mit einer HTTP-Anfrage reagieren, und ich möchte nur, dass das am Ende des Ziehens passiert, nicht einmal bei jedem Modellwechsel. Das Hören des "$ md.pressup" -Ereignisses scheint eine gute Lösung zu sein. – chazzlabs

+2

Das von Ihnen erwähnte $ md.pressup-Ereignis ist wahrscheinlich geeigneter als $ md.dragend. Das Ereignis $ md.dragend scheint nur ausgelöst zu werden, wenn der Schieberegler vom Benutzer tatsächlich als Medikament verwendet wird - wenn er zum Ändern klickt und nicht zieht, wird Dragent nie ausgelöst ($ md.pressup ist jedoch). Da das OP jederzeit wissen möchte, dass ein Wert geändert wird, funktioniert $ md.dragend nicht immer. – kpup

1

ich verwendet, um eine $ Uhr auf die Variable an dem Schieber gebunden:

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

In meinem Fall wie dies mein HTML sah:

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

Good Luck.

1

ich eine Callback-Funktion in ng-blur setzen, die für mich gearbeitet. (Zuerst versucht ng-change, aber das wurde sehr langsam).

Beispiel:

<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

Sie können ng-Änderung über die Richtlinie

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

Sind Sie sicher, dass das funktioniert! – M98

+0

Funktioniert in Angular 1.6.4 mit Winkelmaterial 1.1.4 –

0

ng-mouseup sollte es tun hinzuzufügen. Wenn Sie Logik (wie ich) hinzufügen möchten, um sicherzustellen, dass Ihr Wert geändert wurde, bevor Sie Ihren DB-Aufruf aktualisieren, können Sie das innerhalb Ihrer saveChanges() Funktion in Ihrem Controller hinzufügen.

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

Verwandte Themen