web-dev-qa-db-fra.com

Angular Composant: aucune option de remplacement de modèle?

Il semble qu'il n'y ait pas d'option "remplacer" dans new AngularJS 1.5 Concept de composants (comme c'était le cas pour les directives).

Que suggéreriez-vous si je veux avoir une rangée de tableau <TR> élément en tant que composant? N'est-ce pas possible en termes de code HTML valide?

Exemple concret: le composant mailBox contient des composants de messagerie. Par balisage mail-composant-composant est table, et mail-box est tr.

<mail-box>
    <mail ng-repeat="mail in $ctrl.mails" mail="mail"></mail>
<mail-box>

[~ # ~] upd [~ # ~] : discussion connexe sur les directives - Pourquoi est-il obsolète de remplacer dans AngularJS?

47
Stepan Suvorov

Ce n'est plus possible dans le sens angulaire depuis que le drapeau replace: true est déconseillé.

Pourquoi est-il obsolète de remplacer dans AngularJS?

le remplacement: true flag avait posé plus de problèmes que de solutions, raison pour laquelle il a été supprimé. par conséquent, vous ne pouvez plus construire des directives de cette manière et fournir un balisage table-tr-td valide.

Cependant, il y a deux raisons pour lesquelles ce n'est pas aussi grave qu'il n'y paraît:

  1. vous pouvez faire tout ce que vous voulez faire sans table, tr, td, etc. en utilisant simplement des éléments comme div, span, etc. et quelques css dessus

  2. les composants Web (et les directives constituaient une première tentative de les simuler) ne sont pas censés représenter de tels petits fragments du balisage. ils sont plutôt considérés comme un composant entièrement fonctionnel faisant réellement quelque chose. donc, quoi que vous fassiez avec votre tr, vous pensez que cela vaut la peine de construire une directive d'élément autour de cela, ce n'est probablement pas.

Peut-être que vous pouvez utiliser une directive attributaire à la place:

<tr my-mail-directive></tr>

et votre directive my-mail fait la magie sur l'élément tr

23
Patrick Kelleter