Angular Matrial Slider Data Binding while dragging
I'm trying to control the audio volume with a material slider. Just like the YouTube audio slider. I use two way data binding like this:
<mat-slider min="0" max="1" step="0.01" [(value)]="settingsService.audioTick.volume"></mat-slider>
The problem is, the value will only get updated when I stop dragging the slider. Which is a bad user experience because I don't immediately hear if that is a good volume. So I somehow need to do data binding while dragging.
Here is a StackBlitz: https://stackblitz.com/angular/rojampjmlap
Any Idea?
angular angular-material
add a comment |
I'm trying to control the audio volume with a material slider. Just like the YouTube audio slider. I use two way data binding like this:
<mat-slider min="0" max="1" step="0.01" [(value)]="settingsService.audioTick.volume"></mat-slider>
The problem is, the value will only get updated when I stop dragging the slider. Which is a bad user experience because I don't immediately hear if that is a good volume. So I somehow need to do data binding while dragging.
Here is a StackBlitz: https://stackblitz.com/angular/rojampjmlap
Any Idea?
angular angular-material
add a comment |
I'm trying to control the audio volume with a material slider. Just like the YouTube audio slider. I use two way data binding like this:
<mat-slider min="0" max="1" step="0.01" [(value)]="settingsService.audioTick.volume"></mat-slider>
The problem is, the value will only get updated when I stop dragging the slider. Which is a bad user experience because I don't immediately hear if that is a good volume. So I somehow need to do data binding while dragging.
Here is a StackBlitz: https://stackblitz.com/angular/rojampjmlap
Any Idea?
angular angular-material
I'm trying to control the audio volume with a material slider. Just like the YouTube audio slider. I use two way data binding like this:
<mat-slider min="0" max="1" step="0.01" [(value)]="settingsService.audioTick.volume"></mat-slider>
The problem is, the value will only get updated when I stop dragging the slider. Which is a bad user experience because I don't immediately hear if that is a good volume. So I somehow need to do data binding while dragging.
Here is a StackBlitz: https://stackblitz.com/angular/rojampjmlap
Any Idea?
angular angular-material
angular angular-material
asked Nov 20 at 21:13
Jonas
366116
366116
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
You can use the [value]
property binding syntax to pass someValue
as an @Input
to MatSlider
. MatSlider
has an @Output
property defined named input
that gets triggered when the input
value changes. You can listen to that and simply re-assign whatever is returned as the $event
data to someValue
.
Here, give this a try:
Template:
<mat-slider
(input)="someValue = $event.value"
[value]="someValue">
</mat-slider>
{{ someValue }}
Component:
import {Component} from '@angular/core';
@Component({...})
export class SliderOverviewExample {
someValue = 0;
}
Here's an Updated Sample StackBlitz for your ref.
Thanks, works great!
– Jonas
Nov 21 at 15:19
add a comment |
You need to bind to the input
Output property to get the live data change. Example:
<mat-slider
min="0"
max="1"
step="0.01"
(input)="settingsService.audioTick.volume = $event.value"
[value]="settingsService.audioTick.volume" />
3
You shouldn't two-way bind[(value)]
and also bind(input)
to the same property. Just read bind[value]
.
– G. Tranter
Nov 20 at 21:23
Thank you! Works like it should
– Jonas
Nov 21 at 15:20
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53401623%2fangular-matrial-slider-data-binding-while-dragging%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use the [value]
property binding syntax to pass someValue
as an @Input
to MatSlider
. MatSlider
has an @Output
property defined named input
that gets triggered when the input
value changes. You can listen to that and simply re-assign whatever is returned as the $event
data to someValue
.
Here, give this a try:
Template:
<mat-slider
(input)="someValue = $event.value"
[value]="someValue">
</mat-slider>
{{ someValue }}
Component:
import {Component} from '@angular/core';
@Component({...})
export class SliderOverviewExample {
someValue = 0;
}
Here's an Updated Sample StackBlitz for your ref.
Thanks, works great!
– Jonas
Nov 21 at 15:19
add a comment |
You can use the [value]
property binding syntax to pass someValue
as an @Input
to MatSlider
. MatSlider
has an @Output
property defined named input
that gets triggered when the input
value changes. You can listen to that and simply re-assign whatever is returned as the $event
data to someValue
.
Here, give this a try:
Template:
<mat-slider
(input)="someValue = $event.value"
[value]="someValue">
</mat-slider>
{{ someValue }}
Component:
import {Component} from '@angular/core';
@Component({...})
export class SliderOverviewExample {
someValue = 0;
}
Here's an Updated Sample StackBlitz for your ref.
Thanks, works great!
– Jonas
Nov 21 at 15:19
add a comment |
You can use the [value]
property binding syntax to pass someValue
as an @Input
to MatSlider
. MatSlider
has an @Output
property defined named input
that gets triggered when the input
value changes. You can listen to that and simply re-assign whatever is returned as the $event
data to someValue
.
Here, give this a try:
Template:
<mat-slider
(input)="someValue = $event.value"
[value]="someValue">
</mat-slider>
{{ someValue }}
Component:
import {Component} from '@angular/core';
@Component({...})
export class SliderOverviewExample {
someValue = 0;
}
Here's an Updated Sample StackBlitz for your ref.
You can use the [value]
property binding syntax to pass someValue
as an @Input
to MatSlider
. MatSlider
has an @Output
property defined named input
that gets triggered when the input
value changes. You can listen to that and simply re-assign whatever is returned as the $event
data to someValue
.
Here, give this a try:
Template:
<mat-slider
(input)="someValue = $event.value"
[value]="someValue">
</mat-slider>
{{ someValue }}
Component:
import {Component} from '@angular/core';
@Component({...})
export class SliderOverviewExample {
someValue = 0;
}
Here's an Updated Sample StackBlitz for your ref.
edited Nov 20 at 21:32
answered Nov 20 at 21:26
SiddAjmera
12.4k31137
12.4k31137
Thanks, works great!
– Jonas
Nov 21 at 15:19
add a comment |
Thanks, works great!
– Jonas
Nov 21 at 15:19
Thanks, works great!
– Jonas
Nov 21 at 15:19
Thanks, works great!
– Jonas
Nov 21 at 15:19
add a comment |
You need to bind to the input
Output property to get the live data change. Example:
<mat-slider
min="0"
max="1"
step="0.01"
(input)="settingsService.audioTick.volume = $event.value"
[value]="settingsService.audioTick.volume" />
3
You shouldn't two-way bind[(value)]
and also bind(input)
to the same property. Just read bind[value]
.
– G. Tranter
Nov 20 at 21:23
Thank you! Works like it should
– Jonas
Nov 21 at 15:20
add a comment |
You need to bind to the input
Output property to get the live data change. Example:
<mat-slider
min="0"
max="1"
step="0.01"
(input)="settingsService.audioTick.volume = $event.value"
[value]="settingsService.audioTick.volume" />
3
You shouldn't two-way bind[(value)]
and also bind(input)
to the same property. Just read bind[value]
.
– G. Tranter
Nov 20 at 21:23
Thank you! Works like it should
– Jonas
Nov 21 at 15:20
add a comment |
You need to bind to the input
Output property to get the live data change. Example:
<mat-slider
min="0"
max="1"
step="0.01"
(input)="settingsService.audioTick.volume = $event.value"
[value]="settingsService.audioTick.volume" />
You need to bind to the input
Output property to get the live data change. Example:
<mat-slider
min="0"
max="1"
step="0.01"
(input)="settingsService.audioTick.volume = $event.value"
[value]="settingsService.audioTick.volume" />
edited Nov 20 at 21:29
answered Nov 20 at 21:20
Teddy Sterne
6,74311529
6,74311529
3
You shouldn't two-way bind[(value)]
and also bind(input)
to the same property. Just read bind[value]
.
– G. Tranter
Nov 20 at 21:23
Thank you! Works like it should
– Jonas
Nov 21 at 15:20
add a comment |
3
You shouldn't two-way bind[(value)]
and also bind(input)
to the same property. Just read bind[value]
.
– G. Tranter
Nov 20 at 21:23
Thank you! Works like it should
– Jonas
Nov 21 at 15:20
3
3
You shouldn't two-way bind
[(value)]
and also bind (input)
to the same property. Just read bind [value]
.– G. Tranter
Nov 20 at 21:23
You shouldn't two-way bind
[(value)]
and also bind (input)
to the same property. Just read bind [value]
.– G. Tranter
Nov 20 at 21:23
Thank you! Works like it should
– Jonas
Nov 21 at 15:20
Thank you! Works like it should
– Jonas
Nov 21 at 15:20
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53401623%2fangular-matrial-slider-data-binding-while-dragging%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown