Pregunta

Tengo seleccione los elementos que tienen las mismas opciones a través de toda la aplicación, pero puede parecer un poco diferente, por ejemplo,selecciona para usuario fecha de nacimiento (día, mes, año).

Es allí una manera de crear una directiva que proporcionan los valores de expresión de ng-options?

E. g. <select my-options-months></select>, donde my-options-months iba a crear automáticamente las opciones con valores 1..12 el uso de ng-options directiva.

¿Fue útil?

Solución

Respuesta actualizada Su directiva como esta:

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);
            };
        }
    }
})

Por favor, comprobación de trastear con el ejemplo http://jsfiddle.net/KN9xx/39/

Otros consejos

Si usted está planeando crear un rango de valores en seleccionar acaba de poner en una plantilla.Y si la serie tiene que ser dinámica sólo enlace a un atributo en una directiva.

app.directive('myOptionsMonths', function(){
  return {
    scope: {
      myOptionsMonths:"@"
    },
    link: function(scope,e, a){
      var N = +a.myOptionsMonths;
      scope.values  = Array.apply(null, {length: N}).map(Number.call, Number);
    },
    template: "<select ng-model='t' ng-options='o for o in values'></select>"
  };
}); 

<my-options-months my-options-months="10"></my-options-months>

Demo: http://plnkr.co/edit/tL694zGr5tZJq5L4pwEA?p=preview

puede ser con un enfoque diferente con un filtro como:

.filter('range', function () {
        return function (input, min, max, padding){
            min = parseInt(min);
            max = parseInt(max);
            padding = padding ? padding : false;
            for (var i=min; i<=max; i++){
                input.push(padding ? ("00" + i).slice (-2) : i + '');
            }
            return input;
        };
    })
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top