javascript - template - passar parametro diretiva angularjs




Por que a propriedade `replace` está obsoleta nas diretivas AngularJS? (3)

Do GitHub:

Caitp-- Está obsoleto porque há problemas conhecidos e muito tolos de replace: true , alguns dos quais não podem ser consertados de maneira razoável. Se você é cuidadoso e evita esses problemas, então mais poder para você, mas para o benefício de novos usuários, é mais fácil apenas dizer a eles "isto lhe dará dor de cabeça, não faça isso".

- AngularJS Edição # 7636

replace:true é Depreciado

Do Documentos:

replace ([DEPRECADO!], será removido na próxima versão principal - ou seja, v2.0)

especifique o que o modelo deve substituir. O padrão é false .

  • true - o modelo substituirá o elemento da diretiva.
  • false - o modelo substituirá o conteúdo do elemento da diretiva.

- API abrangente da diretiva AngularJS

De acordo com os documentos da API , o atributo replace das diretivas é reprovado, portanto, no futuro, todas as diretivas se comportarão com o padrão atual de replace: false .

Isso remove a capacidade dos desenvolvedores de substituir o elemento de uma diretiva de elemento, sem substituição aparente para essa funcionalidade.

Veja este plunk para um exemplo de como as diretivas de elemento funcionam com e sem replace: true .

Por que este atributo útil está sendo reprovado sem substituição?


Eu diria que é uma coisa boa que foi removida porque impede que você exponha o funcionamento interno de uma diretiva (componente) para o mundo externo. Observe seu modelo como sendo um DOM de sombra e compare sua diretiva com elementos HTML normais, como um botão. Você não vê todos os tipos de classes sendo adicionados e o estilo sendo aplicado a esses elementos quando você passa o mouse ou clica nele. Está tudo "escondido" por dentro. Como o suporte para sombra DOM é um pouco limitado no momento em que é uma solução alternativa, mas já permite que você seja uma prova do futuro.


ATUALIZAR

Um dos colaboradores disse que não será removido, mas os bugs conhecidos não serão corrigidos. https://github.com/angular/angular.js/commit/eec6394a342fb92fba5270eee11c83f1d895e9fb#commitcomment-8124407

ORIGINAL

Aqui está o commit dessa alteração: https://github.com/angular/angular.js/commit/eec6394a342fb92fba5270eee11c83f1d895e9fb

O sinalizador de replace para definir as diretivas que substituem o elemento no qual eles estão será removido na próxima versão angular principal. Esse recurso tem semântica difícil (por exemplo, como os atributos são mesclados) e leva a mais problemas em comparação com o que ele resolve. Além disso, com WebComponents é normal ter elementos personalizados no DOM.

Parece-me que é uma combinação de complexidade vs benefício para manter o suporte.

E, aparentemente, um motivo para o dev estar sendo usado porque eles preferiam a marcação semanticamente correta a ser injetada, substituindo assim a tag de diretiva personalizada.

Leia os comentários mais abaixo nesse link e, aparentemente, muitas pessoas querem que ele fique.







angularjs-directive