Estou curioso para saber se há uma maneira de substituir modelos únicos e específicos do arquivo ui-bootstrap-tpls. A grande maioria dos modelos padrão atende às minhas necessidades, mas há alguns específicos que gostaria de substituir sem passar por todo o processo de pegar todos os modelos padrão e conectá-los à versão não tpls.
angularjs
angular-ui
angular-ui-bootstrap
Jeremy Privett
fonte
fonte
$modal
serviço para obter mais configurabilidade sem (espero) criar muita dor de cabeça de manutenção.$provide.decorator('$modal'
... No meu caso, não queria renderizar omodalWindow
elemento. Sempre. Eu simplesmente não estava usando, e isso foi o melhor que pude pensar. Eu adoraria ouvir uma maneira melhor, se alguém a tiver.Respostas:
Sim, as diretivas de http://angular-ui.github.io/bootstrap são altamente personalizáveis e é fácil substituir um dos modelos (e ainda contar com os padrões para outras diretivas).
É o suficiente para alimentar
$templateCache
, seja alimentando-o diretamente (como feito noui-bootstrap-tpls
arquivo) ou - provavelmente mais simples - sobrescrever um modelo usando a<script>
diretiva ( doc ).Um exemplo inventado onde eu estou mudando modelo de alerta para troca
x
deClose
é mostrado abaixo:Plunker Live: http://plnkr.co/edit/gyjVMBxa3fToYTFJtnij?p=preview
fonte
Usando
$provide.decorator
Usar
$provide
para decorar a diretiva evita a necessidade de mexer diretamente com ela$templateCache
.Em vez disso, crie seu html de template externo como faria normalmente, com o nome que desejar, e então sobrescreva a diretiva
templateUrl
para apontar para ele.Bifurcação do plunkr de pkozlowski.opensource: http://plnkr.co/edit/RE9AvUwEmKmAzem9mfpI?p=preview
(Observe que você deve anexar o sufixo 'Diretiva' ao nome da diretiva que pretende decorar. Acima, estamos decorando a
alert
diretiva do UI Bootstrap , por isso usamos o nomealertDirective
.)Como muitas vezes você pode querer fazer mais do que apenas substituir o
templateUrl
, isso fornece um bom ponto de partida para estender ainda mais a diretiva, por exemplo, substituindo / agrupando o link ou a função de compilação ( por exemplo ).fonte
alertDirective
uma palavra-chave? em caso afirmativo, para que serve a palavra-chaveTabs
? Estou tentando fazer algo semelhante em guias, mas olhei em alert.js e não vejo onde eles estavamalertDirective
lá.$compileProvider
anexa um sufixo 'Diretiva' ao nome de sua diretiva quando você a registra (o$filterProvider
faz de forma semelhante com um sufixo 'Filtro'); para a maioria dos propósitos, isso é invisível, mas ao decorar, você precisará anexar esse sufixo à diretiva que pretende atingir. Por exemplo,tabDirective
outabsetDirective
, etc. Não exatamente claramente documentada em qualquer lugar que eu poderia encontrar, mas aqui é uma referência para o comportamento semelhante para$filterProvider
, pelo menos: docs.angularjs.org/api/ng/provider/$filterProviderfunction(element, attributes)
para templateUrl. Você pode usar isso para algum comportamento dinâmico (retornar a função templateUrl original ou sua própria string de url dependendo de um atributo, etc). No entanto, ui.bootstrap agora também usa essa mesma funcionalidade para permitir que você forneça umtemplate-url
atributo em uma diretiva, então você também pode potencialmente usar isso se estiver satisfeito em fornecer o caminho do modelo diretamente por meio do atributo do elemento de diretiva.A resposta de pkozlowski.opensource é realmente útil e me ajudou muito! Eu alterei minha condição para ter um único arquivo definindo todas as minhas substituições de template angular e carreguei o JS externo para manter o tamanho da carga útil baixo.
Para fazer isso, vá para a parte inferior do arquivo js de origem ui-bootstrap angular (por exemplo
ui-bootstrap-tpls-0.6.0.js
) e encontre o modelo no qual está interessado. Copie todo o bloco que define o modelo e cole-o em seu arquivo JS de substituição.por exemplo
Em seguida, apenas inclua seu arquivo de substituições após o ui-bootstrap e você obterá o mesmo resultado.
Versão bifurcada de pkozlowski.opensource 's plunk http://plnkr.co/edit/iF5xw2YTrQ0IAalAYiAg?p=preview
fonte
Você pode usar
template-url="/app/.../_something.template.html"
para substituir o modelo atual para essa diretiva.(Funciona no Accordion Bootstrap, pelo menos.)
fonte