Search code examples
javascriptangularjsangularjs-directiveng-options

How to create a directive that provides values for ng-options?


I've got select elements that have the same options across the whole app, but may look a bit differently, e.g. selects for user's birthday (day, month, year).

Is there a way to create a directive that would provide values/expression for ng-options?

E.g. <select my-options-months></select>, where my-options-months would automatically create options with values 1..12 using ng-options directive.


Solution

  • Updated answer Your directive would like this:

    var myapp = angular.module('myapp', []);
    myapp.controller('FirstCtrl', function ($scope) {
        $scope.selectedMonth = 3
    })
        .directive('myOptionsMonths', function ($compile) {
    
        return {
            priority: 1001, // compiles first
            terminal: true, // prevent lower priority directives to compile after it
            compile: function (element, attrs) {
                element.attr("ng-options", "m for m in months");
                element.removeAttr('my-options-months'); // necessary to avoid infinite compile loop      
                var fn = $compile(element);
                return function (scope) {
                    scope.months = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
                    fn(scope);
                };
            }
        }
    })
    

    Please, checkout fiddle with example http://jsfiddle.net/KN9xx/39/