UNPKG

angular-chosen

Version:

Angular bindings for https://github.com/harvesthq/chosen

120 lines (93 loc) 3.83 kB
angular-chosen ============== AngularJS Chosen directive This directive brings the [Chosen](http://harvesthq.github.com/chosen/) jQuery plugin into AngularJS with ngModel and ngOptions integration. To use, include "angular-chosen" as a dependency in your Angular module. You can now use the "chosen" directive as an attribute on any select element. Angular version 1.2+ is required. # Installation $ `npm install angular-chosen -S` ## Yeoman or Bower install If you use Yeoman or Bower install, you need to rename the `chosen.jquery.js` or the `chosen.proto.js` to `chosen.js`. Otherwise Chosen won't be included in your `index.html`. # Features * Works with `ngModel` and `ngOptions` * Supports usage of promises in `ngOptions` * Provides a 'loading' animation when 'ngOptions' collection is a promise backed by a remote source * Pass options to `Chosen` via attributes or by passing an object to the Chosen directive # Usage ### Simple example Similar to `$("#states").chosen()` ```html <select chosen multiple id="states"> <option value="AK">Alaska</option> <option value="AZ">Arizona</option> <option value="AR">Arkansas</option> <option value="CA">California</option> </select> ``` ### Pass any chosen options as attributes ```html <select chosen data-placeholder="Pick one of these" disable-search="true" allow-single-deselect="true"> <option value=""></option> <option>This is fun</option> <option>I like Chosen so much</option> <option>I also like bunny rabbits</option> </select> ``` Note: the empty option element is mandatory when using `allow-single-deselect` ### Integration with `ngModel` and `ngOptions` ```html <select multiple chosen ng-model="state" ng-options="s for s in states"> </select> ``` Note: don't try to use `ngModel` with `ngRepeat`. It won't work. Use `ngOptions`. It's better that way. Also important: if your `ngModel` is null or undefined, you must manually include an empty option inside your `<select>`, otherwise you'll encounter strange off-by-one errors: ```html <select multiple chosen ng-model="state" ng-options="s for s in states"> <option value=""></option> </select> ``` This annoying behavior is alluded to in the examples in the [documentation for ngOptions](http://docs.angularjs.org/api/ng.directive:select). #### Works well with other AngularJS directives ```html <select chosen ng-model="state" ng-options="s for s in states" ng-disabled="editable"> </select> ``` ### Loading from a remote data source Include chosen-spinner.css and spinner.gif to show an Ajax spinner icon while your data is loading. If the collection comes back empty, the directive will disable the element and show a default "No values available" message. You can customize this message by passing in noResultsText in your options. ##### app.js ```js angular.module('App', ['ngResource', 'localytics.directives']) .controller('BeerCtrl', function($scope) { $scope.beers = $resource('api/beers').query() }); ``` ##### index.html ```html <div ng-controller="BeerCtrl"> <select chosen data-placeholder="Choose a beer" no-results-text="'Could not find any beers :('" ng-model="beer" ng-options="b for b in beers"> </select> </div> ``` Image of select defined above in loading state: <img src="https://raw.github.com/localytics/angular-chosen/master/example/choose-a-beer.png"> Note: Assigning promises directly to scope is now deprecated in Angular 1.2+. Assign the results of the promise to scope once the promise returns. The loader animation will still work as long as the collection expression evaluates to `undefined` while your data is loading! See the example directory for more detailed usage.