2016-02-09 14 views
39

Es sieht so aus, als ob in dem neuen AngularJS 1.5 Komponenten-Konzept keine "Ersetzen" -Option vorhanden ist (wie es für Richtlinien der Fall war).Angular Component: keine Vorlage ersetzen Option?

Was würden Sie vorschlagen, wenn ich Tabellenzeile<TR> Element als Komponente haben möchte? Ist es in Bezug auf gültiges HTML nicht möglich?

Wirkliches Beispiel: mailBox Komponente hat Mail-Komponenten in. Durch Markup Mail-Box-Komponente ist Tabelle, und Mail-Box ist tr.

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

UPD: bezogene Diskussion über Richtlinien - Why is replace deprecated in AngularJS?

+0

Die Lösung ist nicht zu Verwenden Sie Markup und CSS mit strengen strukturellen Anforderungen. Was macht "mail" genau? Höchstwahrscheinlich muss Mailbox seine Funktionalität und die gesamte Vorlage aufnehmen. – estus

+0

Ich möchte jede Mail die separate Komponente sein –

+0

Das ist die Arbeit für Richtlinien, keine Komponenten. Komponenten sollen eigenständige UI-Widgets sein, lesen Sie mehr zu Webkomponenten. – estus

Antwort

20

Dies ist nicht möglich, die winkelige Wege mehr, da die ersetzen: true-Flag wurde

veraltet

Why is replace deprecated in AngularJS?

der Ersatz: True Flag hatte mehr Probleme als Lösungen, die ich Warum wurde es entfernt? Daher können Sie Richtlinien nicht mehr so ​​erstellen und bieten eine gültige Tabelle-tr-td-Markup.

Allerdings gibt es zwei Gründe, warum dies nicht so schlimm ist, wie es aussieht:

  1. Sie können Sie tun alles ohne Tisch machen wollen, tr, td, usw. nur unter Verwendung von Elementen wie div , spanne, etc. und einige CSS darauf

  2. Web-Komponenten (und Direktiven waren ein erster Versuch, sie zu simulieren ) sollen nicht solche kleinen Fragmente des Markups darstellen. sie sind eher als eine voll funktionsfähige Komponente tatsächlich gedacht etwas zu tun. also was auch immer du mit deinem tr machen willst, dass du denkst, es lohnt sich, eine element-direktive zu bauen, es ist wahrscheinlich nicht .

Vielleicht, was Sie tun können, ist mit einem Attribut-Richtlinie statt:

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

und Ihre my-Mail-Richtlinie hat die Magie auf dem tr Element

+1

Attribute sind auch für Komponenten nicht möglich, wenn ich die Dokumente richtig verstanden habe. "einschränken: Nein (nur auf Elemente beschränkt)" – bersling

+0

@PatrickKelleter Die von Ihnen verwendete Formulierung verursacht nur Verwirrung.Komponenten sind keine Direktiven, Direktiven sind kein Teil von Angular2 einfach und einfach zu sagen, eine Komponente ist eine Direktive nur verwirrt Menschen –

+0

@BrianOgden was ich sagte ist, dass die alten Elment-Direktiven (ng1, beschränken: 'E') sind jetzt bekannt als Komponenten in ng2 - während die OLD-Attribut-Direktiven (ng1, restricte: 'A') nicht als Direktiven in ng2 bekannt sind. und JA - da gibt es Anweisungen in ng2. zu sagen, dass Direktiven nicht Teil von ng2 sind, ist falsch - schlicht und einfach. überprüfen Sie die Dokumentation dafür https://angular.io/docs/ts/latest/guide/attribute-directives.html –