1
resposta

Passar valor do Html para directiva

Como posso passar o valor do html para minha diretiva , o valor é uma data segue meu codigo.

function () {
    'use strict';
    angular.module('finansi').directive('feriadoDirective', FeriadoDirective);
    FeriadoDirective.$inject = ['BoletoService', '$timeout'];
    /* @ngInject */
    function FeriadoDirective(BoletoService, $timeout) {

        return {

            restrict: "AE",

            //O TimeOut, espera uma requisição concluir após da mesma está concluida ele executa uma função já com a resposta da promessa atualizada                 
            // O link serve para quando eu for manipular os dados é uma alternatica para o controller na directive.

            // o promisse sempre vai retorna uma promessa ,se eu quiser manipular os dados eu tenho que  usar um scope.
            scope: {

            },

            require: "ngModel",
            link: function (scope, elem, attrs, ngModelCtrl) {

                BoletoService.getFeriados().then(ok, erro);
                function ok(response) {

                    ngModel.
                    scope.desabilitados = response.data.lista;
                    scope.config = response.data.config;
                    scope.dataFinal = new Date();
                    scope.dataAux = new Date();                    
                    scope.dataFinal.setDate(scope.dataFinal.getDate()+ scope.config.diasProrogacao);
                   // console.log(scope.dataFinal);
                    var options = {
                        beforeShowDay: function (dateText) {
                            var desabilitar = [];
                            function alterar(dataAux) {
                                var data = new Date(dataAux);
                                var dia = data.getDate();
                                if (dia.toString().length === 1)
                                    dia = "0" + dia;
                                var mes = data.getMonth() + 1;
                                if (mes.toString().length === 1)
                                    mes = "0" + mes;
                                var ano = data.getFullYear();
                                return dia + "/" + mes + "/" + ano;
                            }

                            console.log(scope.desabilitados);
                            for (var i = 0; i < scope.desabilitados.length; i++) {
                                desabilitar[i] = alterar(scope.desabilitados[i]);
                            }
                            var datepickerDay = ('0' + dateText.getDate()).slice(-2) + '/'
                                    + ('0' + (dateText.getMonth() + 1)).slice(-2) + '/'
                                    + dateText.getFullYear();
                            console.log(datepickerDay);
                            console.log(desabilitar);
                            if (desabilitar.indexOf(datepickerDay.trim()) > -1) {
                                return [false, ""," dia não letivo"];
                            }
                            return [true, "", "disponivel"];

                        },

                        dayNames: ['Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado'],
                        dayNamesMin: ['D', 'S', 'T', 'Q', 'Q', 'S', 'S', 'D'],
                        dayNamesShort: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb', 'Dom'],
                        monthNames: ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],
                        monthNamesShort: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'],
                        nextText: 'Próximo',
                        prevText: 'Anterior',
                        minDate : new Date(),
                        maxDate : scope.dataFinal,
                        dateFormat: 'dd/mm/yy',
                        onSelect: function (dateText) {
                            updateModel(dateText);
                        }
                    };
                    elem.datepicker(options);
                }
                function erro(response) {
                    scope.desabilitados = response.data.lista;
                }

                var updateModel = function (dateText) {
                    scope.$apply(function () {
                        ngModelCtrl.$setViewValue(dateText);

                    });
                };

            }
        };
    }
}
)();
1 resposta

Não entendi muito bem o seu código, mas uma diretiva recebe valor através das propriedades que você definir em seu scope. No caso, você não tem nenhuma propriedade.

Veja o seguinte exemplo que adoto no vídeo:

https://cursos.alura.com.br/course/angularjs-mvc/task/9306

Minha resposta seria uma cópia do código. Nela, nossa diretiva recebe parâmetros, inclusive eu mostro como acessá-las na função link.