(1) Ho una direttiva transitoria denominata portlet
che prende il suo contenuto e lo avvolge in un codice di codice. Ad esempio:AngularJS: come si possono escludere più direttive?
<portlet>
<div class="foobar">My content</div>
</portlet>
passa attraverso il modello di portlet
, che è:
<div class="portlet">
<div class="icon"></div>
<div class="content" ng-transclude="">
</div>
</div>
E diventa:
<div class="portlet">
<div class="icon"></div>
<div class="content">
<div class="foobar">My content</div> <!--the original content
passed to portlet-->
</div>
(2) Ho altre due direttive, dyn-form
e dyn-form-field
. Descritto in questo modo:
<dyn-form>
<dyn-form-field type="textbox" placeholder="..." label="Name" />
<! ...and so on... -->
</dyn>
dyn-form
's template:
<form class="..." ng-transclude="">
</form>
Ogni dyn-field
' s template genera il codice HTML per produrre l'etichetta/campi per esso. Così il codice originale è tradotto in qualcosa di simile a questo:
<form class="...">
<label>Name: <input type="text" placeholder="..." /></label>
<!- ....and so on... -->
</form>
(3) Ecco il problema. Voglio utilizzare una terza direttiva, dyn-form-portlet
per la generazione del codice boilerplate per la visualizzazione di alcuni pulsanti mostrati sopra ogni modulo, quindi mostrare un portlet e inserire dyn-form
all'interno del portlet. Questo è il modo che sto cercando di fare questo:
<dyn-form-portlet>
<dyn-form>
<dyn-form-field />
</dyn-form>
</dyn-form-portlet>
s' dyn-form-portlet
si presenta così:
<div class="dyn-form-portlet">
<button>Foo</button>
<button>Bar</button>
<portlet ng-transclude="">
</portlet>
</div>
Teoricamente questo dovrebbe funzionare, cioè <dyn-form>
deve essere posto all'interno <portlet>
, <dyn-form-field>
s all'interno <dyn-form>
, e così via. Ma quando eseguo questo, vedo solo i pulsanti visualizzati da dyn-form-portlet
e il codice per portlet
, ma portlet
è vuoto e il modulo non viene visualizzato in esso.
Sto facendo qualcosa di sbagliato, o si tratta di un bug?
Realizzato un plunk se c'è qualcuno interessato: http://plnkr.co/edit/FUYCQbw8Tnx3Qhcj4108?p=preview Se rimuovi la transclude: true dal portlet, funziona ma non sono sicuro delle implicazioni. –
Ecco quello che credo stia accadendo. La direttiva '' all'interno del modello 'dyn-form-portlet' viene compilata da Angular prima che la direttiva sia collegata, quindi quando' dyn-form-portlet' viene elaborato, il tag 'portlet' all'interno del suo template è già stato reso. Dai un'occhiata a questo [Plunker] (http://plnkr.co/edit/szuDxjGPB8id2yrto7zM?p=preview) e controlla l'output della console. Non so se questo è un bug o solo il comportamento naturale angolare in questo caso. –
@MichaelBenford Questo è davvero ciò che sembra accadere, tuttavia sembra un bug. Voglio dire, tutte le sotto-direttive all'interno di 'dyn-form' sono transientate in' dyn-form', quindi perché dovrebbe essere diverso per 'dyn-form-portlet' e' dyn-form'? Qualcuno può segnalare questo come un bug al team di AngularJS? –