Skip to content

Instantly share code, notes, and snippets.

@dave-newson
Last active January 10, 2018 05:00
Show Gist options
  • Save dave-newson/f6c5e9c2f3bc315e292c to your computer and use it in GitHub Desktop.
Save dave-newson/f6c5e9c2f3bc315e292c to your computer and use it in GitHub Desktop.
Bootstrap-toggle AngularJS directive
'use strict';
/**
* Bootstrap-toggle Directive
* @link https://github.com/minhur/bootstrap-toggle
*/
angular.module('toggleCheckbox', [])
.directive('toggleCheckbox', function() {
/**
* Directive
*/
return {
restrict: 'A',
transclude: true,
replace: false,
require: 'ngModel',
link: function ($scope, $element, $attr, require) {
var ngModel = require;
// update model from Element
var updateModelFromElement = function() {
// If modified
var checked = $element.prop('checked');
if (checked != ngModel.$viewValue) {
// Update ngModel
ngModel.$setViewValue(checked);
$scope.$apply();
}
};
// Update input from Model
var updateElementFromModel = function() {
// Update button state to match model
$element.trigger('change');
};
// Observe: Element changes affect Model
$element.on('change', function() {
updateModelFromElement();
});
// Observe: ngModel for changes
$scope.$watch(function() {
return ngModel.$viewValue;
}, function() {
updateElementFromModel();
});
// Initialise BootstrapToggle
$element.bootstrapToggle();
}
};
});
@grenoult
Copy link

Thanks Dave. Here's the version with ngDisabled that jjmontesl created but not available on gist anymore: https://gist.github.com/grenoult/20ddc6c23d6f06580fce9803521f1ea6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment