O que é (veja a definição clara de jQuery como um exemplo)?
Uma diretiva é essencialmente uma função † que é executada quando o compilador Angular a encontra no DOM. A (s) função (s) pode (m) fazer quase tudo, e é por isso que acho que é bastante difícil definir o que é uma diretiva. Cada diretiva possui um nome (como ng-repeat, tabs, make-up-yourself) e cada diretiva determina onde pode ser usada: elemento, atributo, classe, em um comentário.
† Normalmente, uma diretiva possui apenas uma função de link (pós). Uma diretiva complicada pode ter uma função de compilação, uma função de pré-link e uma função de pós-link.
Quais problemas e situações práticas ele pretende resolver?
A coisa mais poderosa que as diretivas podem fazer é estender o HTML. Suas extensões são uma linguagem específica de domínio (DSL) para criar seu aplicativo. Por exemplo, se seu aplicativo executar um site de compras on-line, você poderá estender o HTML para ter diretivas "carrinho de compras", "cupom", "promoções" etc. etc. - quaisquer palavras, objetos ou conceitos que sejam mais naturais para usar nas " compras on-line ", em vez de" div "se" span "s (como o @WTK já mencionou).
As diretivas também podem componente HTML - agrupe um monte de HTML em algum componente reutilizável. Se você estiver usando o ng-include para extrair muito HTML, provavelmente é hora de refatorar as diretivas.
Qual padrão de design ele incorpora ou, alternativamente, como ele se encaixa na suposta missão MVC / MVW do angularjs
As diretivas são onde você manipula o DOM e captura os eventos do DOM. É por isso que as funções de compilação e link da diretiva recebem o "elemento" como argumento. Você pode
- defina um monte de HTML (isto é, um modelo) para substituir a diretiva
- eventos de ligação a este elemento (ou seus filhos)
- adicionar / remover uma classe
- altere o valor text ()
- observe as alterações nos atributos definidos no mesmo elemento (na verdade, são os valores dos atributos que são observados - essas são propriedades do escopo; portanto, a diretiva observa o "modelo" para alterações)
- etc.
Em HTML temos coisas como
<a href="...">
,
<img src="...">
,
<br>
,
<table><tr><th>
. Como você descreveria o que são a, href, img, src, br, table, tr e th? Isso é o que é uma diretiva.