DEV Community

mohammadreza samani
mohammadreza samani

Posted on

Introducing NgxKnob: A Versatile Knob Component for Angular

As developers, we often encounter situations where we need to give users a simple and intuitive way to control numeric values within a specified range. Whether it’s for controlling volume, adjusting brightness, or setting any other parameter, a knob component can be the perfect solution. Today, I'm excited to introduce NgxKnob, a highly customizable and easy-to-use Angular component for creating knob-based input controls.

Image description

🚀 What is NgxKnob?

NgxKnob is a fully customizable Angular component that allows users to select a value within a range by rotating a knob. It supports a wide array of configurations, making it a perfect fit for various use cases, from simple sliders to more complex input controls.

Key Features:

  • Customizable Appearance: Modify colors, labels, and ranges to suit your design needs.
  • Drag and Touch Support: Works seamlessly with both mouse and touch inputs.
  • Built-in Validation: Ensures the input value remains within the specified range.
  • Responsive Design: Adapts to different screen sizes, ensuring a consistent user experience.

🛠️ How to Use NgxKnob

Installation

To get started with NgxKnob, you can install it via npm:

npm install ngx-knob --save
Enter fullscreen mode Exit fullscreen mode

Basic Setup

Once installed, you can import the NgxKnobComponent into your module:

import { NgxKnobComponent } from 'ngx-knob';

@NgModule({
  declarations: [
    // your components
    NgxKnobComponent,
  ],
  // other configurations
})
export class AppModule {}
Enter fullscreen mode Exit fullscreen mode

Usage Example

Here’s a simple example of how to use NgxKnob in your Angular template:

<ngx-knob
  [min]="0"
  [max]="100"
  [(ngModel)]="value"
  [colorRanges]="colorRanges"
  title="VOLUME"
></ngx-knob>
Enter fullscreen mode Exit fullscreen mode

And in your component:

@Component({
  selector: 'app-volume-control',
  templateUrl: './volume-control.component.html',
})
export class VolumeControlComponent {
  value = 50;
  colorRanges = [
    { color: '#FF0000', percent: 20 },
    { color: '#FFFF00', percent: 50 },
    { color: '#00FF00', percent: 100 },
  ];
}
Enter fullscreen mode Exit fullscreen mode

Explanation

  • min and max: These inputs define the range of values the knob can represent.
  • ngModel: This binds the knob’s value to a variable in your component, allowing for two-way data binding.
  • colorRanges: This input allows you to define the color ranges displayed on the knob, making it visually informative.

Customization

NgxKnob offers a wide range of customization options, allowing you to tailor the component to fit your specific needs. You can easily change the color scheme, adjust the range, and even modify the knob's size.

🔄 Handling User Interaction

NgxKnob provides an intuitive interface for users to interact with. By simply clicking or dragging the knob, users can adjust the value. The component handles all the heavy lifting, including the conversion of angles to values and the corresponding UI updates.

Example of Advanced Usage

import { Component } from '@angular/core';
import { IColorRange } from 'ngx-knob';

@Component({
  selector: 'app-advanced-knob',
  templateUrl: './advanced-knob.component.html',
})
export class AdvancedKnobComponent {
  value = 75;
  colorRanges: IColorRange[] = [
    { color: '#F00', percent: 25 },
    { color: '#0F0', percent: 50 },
    { color: '#00F', percent: 100 },
  ];

  onValueChange(newValue: number) {
    console.log('Knob value changed to:', newValue);
  }
}
Enter fullscreen mode Exit fullscreen mode

Adding Validation

NgxKnob also supports Angular’s reactive forms, making it easy to integrate with form validation:

this.form = new FormGroup({
  knobValue: new FormControl(50, [Validators.min(0), Validators.max(100)]),
});
Enter fullscreen mode Exit fullscreen mode

📊 Real-World Applications

Whether you’re building a music player, a control panel, or a settings page, NgxKnob offers a sleek, intuitive interface that enhances user experience. Its flexibility makes it suitable for a wide range of applications, from simple UIs to more complex interactive dashboards.

🛡️ Conclusion

NgxKnob is a powerful tool that can greatly enhance the interactivity and usability of your Angular applications. With its easy integration, rich customization options, and robust performance, it’s a component you’ll want to keep in your toolkit.

You can find the full source code and documentation on GitHub. Contributions and feedback are always welcome! I look forward to seeing how you use NgxKnob in your projects.


Happy coding! 🚀


GitHub
NPM
Live Demo

Top comments (0)