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();
}
};
});
@jamesholcomb
Copy link

Thanks for putting this together.

Had a question...can you extend your directive to enable binding the input checked=true/false values to specific $scope model string values (e.g. "on" and "off")?

@jamesholcomb
Copy link

Figured it out...Add

ng-true-value="'on'" ng-false-value="'off'"

note the single quotes within the double quotes.

@jjmontesl
Copy link

Thanks for this! Check https://gist.github.com/jjmontesl/54457bf1342edeb218b7 for a version with support for ngDisabled.

@nyzzi
Copy link

nyzzi commented Jan 18, 2016

Is there an easy way to support a function callback? In several use cases I need to have the control call a function to do some logic and then switch the state.

@thangaduraiarepo
Copy link

thangaduraiarepo commented May 23, 2016

For me Some times working and some times not working. I included both .css and .js file bootstrap-toggle. Change Event calling two times. so value reset to same value.Can't find why it's calling two times. Please guide me..

@mohammad-shadmehr
Copy link

How would I be able to apply this directive on checkbox within a ui-grid?
I have tried the following but checkbox states are not changed:

{ name: 'isDeleted', displayName: 'To be Deleted', enableCellEdit: false, type: 'boolean', cellTemplate: '' },

@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