Comment puis-je utiliser Bootstrap multiselect Dropdown à AngularJS
je veux utiliser Bootstrap Multiselect Déroulante http://davidstutz.github.io/bootstrap-multiselect/ dans AngularJS. J'ai entendu dire qu'il fallait passer à la Directive. Mais je pense que c'est assez compliqué et ne sais pas ce que j'ai à faire. Si vous avez vécu, merci de me guider! Tks.
3 réponses
si vous n'avez pas besoin de créer du code qui est très réutilisable, ce n'est en fait pas si compliqué. La première étape consiste à créer une directive de base et à obtenir L'élément DOM:
angular.module('yourapp', [])
.directive('multiselectDropdown', [function() {
return function(scope, element, attributes) {
element = $(element[0]); // Get the element as a jQuery element
// Below setup the dropdown:
element.multiselect({
option1: 123,
option2: "abcd",
// etc.
})
// Below maybe some additional setup
}
}]);
EN GROS, une fois que vous êtes dans la directive, c'est juste du jQuery ou du js.
puis dans votre code HTML:
<select multiselectDropdown >
<option value="1">One</option>
<option value="2">One</option>
<option value="3">One</option>
</select>
vous pouvez également spécifier des attributs supplémentaires sur le DIV et obtenir les valeurs en utilisant le attributes
paramètre de la directive.
Voici une directive que j'utilise dans mon projet. Il fonctionne sur Chrome et Firefox. Vous pouvez modifier les options en fonction de vos propres besoins.
angular.module('yourApp')
.directive('yourDirective', function () {
return {
link: function (scope, element, attrs) {
element.multiselect({
buttonClass: 'btn',
buttonWidth: 'auto',
buttonContainer: '<div class="btn-group" />',
maxHeight: false,
buttonText: function(options) {
if (options.length == 0) {
return 'None selected <b class="caret"></b>';
}
else if (options.length > 3) {
return options.length + ' selected <b class="caret"></b>';
}
else {
var selected = '';
options.each(function() {
selected += $(this).text() + ', ';
});
return selected.substr(0, selected.length -2) + ' <b class="caret"></b>';
}
}
});
// Watch for any changes to the length of our select element
scope.$watch(function () {
return element[0].length;
}, function () {
element.multiselect('rebuild');
});
// Watch for any changes from outside the directive and refresh
scope.$watch(attrs.ngModel, function () {
element.multiselect('refresh');
});
}
};
});
mettre à jour deux extraits de la directive qui fonctionne sur AngularJS v1.3.15 et bootstrap-multiselect v0.9.6: JavaScript, CoffeeScript
// AngularJS: 1.5.8
// bootstrap-multiselect: 0.9.13
angular.module('SocoApp')
.directive('multiSelect', function () {
return {
link: function (scope, element, attrs: any) {
var options: any = {
onChange: function (optionElement, checked) {
if (optionElement != null) {
$(optionElement).removeProp('selected');
}
if (checked) {
$(optionElement).prop('selected', 'selected');
}
element.change();
}
};
//attrs are lowercased by Angular, but options must match casing of bootstrap-multiselect
if (attrs.enablehtml) options.enableHTML = JSON.parse(attrs.enablehtml); //default: false
if (attrs.buttonclass) options.buttonClass = attrs.buttonclass; //default: 'btn btn-default'
if (attrs.inheritclass) options.inheritClass = JSON.parse(attrs.inheritclass); //default: false
if (attrs.buttonwidth) options.buttonWidth = attrs.buttonwidth; //default: 'auto'
if (attrs.buttoncontainer) options.buttonContainer = attrs.buttoncontainer; //default: '<div class="btn-group" />'
if (attrs.dropright) options.dropRight = JSON.parse(attrs.dropright); //default: false
if (attrs.dropup) options.dropUp = JSON.parse(attrs.dropup); //default: false
if (attrs.selectedclass) options.selectedClass = attrs.selectedclass; //default: 'active'
if (attrs.maxheight) options.maxHeight = attrs.maxheight; //default: false, // Maximum height of the dropdown menu. If maximum height is exceeded a scrollbar will be displayed.
if (attrs.includeselectalloption) options.includeSelectAllOption = JSON.parse(attrs.includeselectalloption); //default: false
if (attrs.includeselectallifmorethan) options.includeSelectAllIfMoreThan = attrs.includeselectallifmorethan; //default: 0
if (attrs.selectalltext) options.selectAllText = attrs.selectalltext; //default: ' Select all'
if (attrs.selectallvalue) options.selectAllValue = attrs.selectallvalue; //default: 'multiselect-all'
if (attrs.selectallname) options.selectAllName = JSON.parse(attrs.selectallname); //default: false
if (attrs.selectallnumber) options.selectAllNumber = JSON.parse(attrs.selectallnumber); //default: true
if (attrs.selectalljustvisible) options.selectAllJustVisible = JSON.parse(attrs.selectalljustvisible); //default: true
if (attrs.enablefiltering) options.enableFiltering = JSON.parse(attrs.enablefiltering); //default: false
if (attrs.enablecaseinsensitivefiltering) options.enablecaseinsensitivefiltering = JSON.parse(attrs.enableCaseInsensitiveFiltering); //default: false
if (attrs.enablefullvaluefiltering) options.enableFullValueFiltering = JSON.parse(attrs.enablefullvaluefiltering); //default: false
if (attrs.enableclickableoptgroups) options.enableClickableOptGroups = JSON.parse(attrs.enableclickableoptgroups); //default: false
if (attrs.enablecollapsibleoptgroups) options.enableCollapsibleOptGroups = JSON.parse(attrs.enablecollapsibleoptgroups); //default: false
if (attrs.filterplaceholder) options.filterPlaceholder = attrs.filterplaceholder; //default: 'Search'
if (attrs.filterbehavior) options.filterBehavior = attrs.filterbehavior; //default: 'text', // possible options: 'text', 'value', 'both'
if (attrs.includefilterclearbtn) options.includeFilterClearBtn = JSON.parse(attrs.includefilterclearbtn); //default: true
if (attrs.preventinputchangeevent) options.preventInputChangeEvent = JSON.parse(attrs.preventinputchangeevent); //default: false
if (attrs.nonselectedtext) options.nonSelectedText = attrs.nonselectedtext; //default: 'None selected'
if (attrs.nselectedtext) options.nSelectedText = attrs.nselectedtext; //default: 'selected'
if (attrs.allselectedtext) options.allSelectedText = attrs.allselectedtext; //default: 'All selected'
if (attrs.numberdisplayed) options.numberDisplayed = attrs.numberdisplayed; //default: 3
if (attrs.disableifempty) options.disableIfEmpty = JSON.parse(attrs.disableifempty); //default: false
if (attrs.disabledtext) options.disabledText = attrs.disabledtext; //default: ''
if (attrs.delimitertext) options.delimiterText = attrs.delimitertext; //default: ', '
element.multiselect(options);
// Watch for any changes to the length of our select element
scope.$watch(function () {
//debugger;
return element[0].length;
}, function () {
scope.$applyAsync(element.multiselect('rebuild'));
});
// Watch for any changes from outside the directive and refresh
scope.$watch(attrs.ngModel, function () {
element.multiselect('refresh');
});
}
};
});