View on GitHub

Angular Color Picker

Vanilla AngularJS Color Picker Directive with no requirement on jQuery

Download this project as a .zip file Download this project as a tar.gz file

Angular Color Picker

Vanilla AngularJS Color Picker Directive with no requirement on jQuery


Two Way Binding - {{color}}
- Exposes open, close, getElement, and getScope methods. Must be unique per color picker.
- Handles onChange, onOpen, onClose, onBlur, and onDestroy events. Open the console to view them. Can be shared among color pickers.



bower install angularjs-color-picker --save


npm install angularjs-color-picker --save


angular.module('app', ['color.picker']);
<color-picker ng-model="myColor"></color-picker>


HTML - Only ng-model is required. If supplying an api it must be a unique object per color picker. However the event api can be shared among color pickers.



$scope.color = '#FF0000';

// options - if a list is given then choose one of the items. The first item in the list will be the default
$scope.options = {
    // html attributes
    required: [false, true],
    disabled: [false, true],
    placeholder: '',
    inputClass: '',
    id: undefined,
    name: undefined,
    // validation
    restrictToFormat: [false, true],
    preserveInputFormat: [false, true],
    allowEmpty: [false, true],
    // color
    format: ['hsl', 'hsv', 'rgb', 'hex', 'hexString', 'hex8', 'hex8String', 'raw'],
    case: ['upper', 'lower'],
    // sliders
    hue: [true, false],
    saturation: [false, true],
    lightness: [false, true], // Note: In the square mode this is HSV and in round mode this is HSL
    alpha: [true, false],
    dynamicHue: [true, false],
    dynamicSaturation: [true, false],
    dynamicLightness: [true, false],
    dynamicAlpha: [true, false],
    // swatch
    swatch: [true, false],
    swatchPos: ['left', 'right'],
    swatchBootstrap: [true, false],
    swatchOnly: [true, false],
    // popup
    round: [false, true],
    pos: ['bottom left', 'bottom right', 'top left', 'top right'],
    inline: [false, true],
    horizontal: [false, true],
    // show/hide
    show: {
        swatch: [true, false],
        focus: [true, false],
    hide: {
        blur: [true, false],
        escape: [true, false],
        click: [true, false],
    // buttons
    close: {
        show: [false, true],
        label: 'Close',
        class: '',
    clear: {
        show: [false, true],
        label: 'Clear',
        class: '',
    reset: {
        show: [false, true],
        label: 'Reset',
        class: '',

// exposed api functions
$;       // opens the popup
$scope.api.close();      // closes the popup
$scope.api.clear();      // removes value
$scope.api.reset();      // resets color value to original value
$scope.api.getElement(); // returns the wrapping <color-picker> element
$scope.api.getScope();   // returns the color picker $scope

// api event handlers
$scope.eventApi = {
    onChange:  function(api, color, $event) {},
    onBlur:    function(api, color, $event) {},
    onOpen:    function(api, color, $event) {},
    onClose:   function(api, color, $event) {},
    onClear:   function(api, color, $event) {},
    onReset:   function(api, color, $event) {},
    onDestroy: function(api, color) {},

// decorator - all variables in options can be globally overridden here
    .module('app', ['color.picker'])
    .config(function($provide) {
        $provide.decorator('ColorPickerOptions', function($delegate) {
            var options = angular.copy($delegate);
            options.round = true;
            options.alpha = false;
            options.format = 'hex';
            return options;


NO requirement for jQuery!


Inspiration and code taken from projects like