Pergunta

Assim que eu tiver um aplicativo de calendário, onde agora o usuário escolhe datas de início/término e clica em atualizar o calendário.Isso preenche um calendário.No entanto, estou tendo problemas, incluindo novos elementos no escopo.Por exemplo, em vez de continuar usando a mesma função repetidamente para calcular a célula "data" para alguns célula a partir da data de início, o número de semana, dia da semana, etc, eu quero armazenar a célula de data de uma vez em seu escopo e que todo mundo usa-lo.De alguma forma eu sou incapaz de fazer isso, apesar de muitas tentativas.No JSFiddle abaixo, você vai notar dias do mês de exibição no canto superior direito de cada um calendário de célula.No entanto, se você alterar as datas, para dizer ao mês anterior, os dias do mês de atualização, mas a célula "data" eu tenho apresentado na célula não atualiza!

Tome, por exemplo, "Sat Jul 05 de 2014".Atualizar as datas de início em 6/1 e o extremo direito da célula é ainda "Sab Jul 05 de 2014", mesmo que o seu dia do mês reflete a 7 de junho!O código relevante é em "calcell directiva" e "eventos" directiva.Em calcell, eu definir o celld como ng-init='celld=cellDate(num, start_dt, $índice)'.Em seguida, em eventos que eu simplesmente exibir usando {{celld}}.Eu poderia obtê-lo para o trabalho, usando cellDate(num, start_dt, $índice) em eventos, mas eu realmente não quero estar usando a mesma função de um milhão de vezes em todos os lugares.Existe uma maneira que eu posso armazenar a data na célula a célula objeto e usá-lo apenas em crianças escopo e ter que atualizar quando alterações de dados?Eventualmente eu vou estar passando célula de data para uma função para obter dados de eventos para essa data e, em seguida, eventos irá iterar sobre eles para exibir os dados de eventos.

violino link

app.directive("events", function($compile, DateService) {
        return {
            restrict: "A",
            replace: true,
            scope: true,
            template: 
                    "<div>{{celld}}</div>",
            link: function(scope, element, attrs) {
                scope.DateService = DateService;
            }
        }
    });

    //calendar cell 
    app.directive("calcell", function($compile, DateService) {
        return {
            restrict: "A", 
            replace: true, 
            scope: true,
            template: 
                "<td ng-init='celld=cellDate(num, start_dt, $index)' id='{{\"td\" + DateService.getDateInt(cellDate(num, start_dt, $index))}}' \
                        realclass='{{getScopeClass(cellDate(num, start_dt, $index))}}'>\
                    <div>\
                        <a class='CellDay'>{{DateService.getMonthDay(cellDate(num, start_dt, $index))}}</a>\
                    </div>\
                    <br/>\
                    <br/>\
                    <br/>\
                    <br/>\
                    <div events></div>\
                    </div>\
                </td>",
            link: function(scope, element, attrs) {                 
                scope.DateService = DateService;
            }
        }
    }); 

Obrigado!

Foi útil?

Solução

Eu era capaz de fazer o trabalho, colocando a celld sobre o evento marca.Não sei se isso ajuda.

<div events ng-attr-celld='{{cellDate(num, start_dt, $index)}}'></div>

não há necessidade de substituí-lo e o atr é o valor de escopo.

//replace: true,
...
scope: {celld:'@'}

violino

E caso você ainda não tenha visto - angular interface de usuário calendário - pode poupar algum tempo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top