Esiste un modo per escludere del contenuto in una direttiva senza aggiungere elementi aggiuntivi.Transclude in AngularJS senza aggiungere nuovo elemento
Per esempio
direttiva:
{
scope: {
someParam: "="
},
link: function(scope, element, attrs){
//do something
},
transclude: true,
template:'<div ng-transclude></div>'
}
sorgente html:
<div my-directive some-param="somethingFromController">
my transcluded content: {{somethingElseFromController}}
</div>
Con questo esempio un div in più viene aggiunto al markup. Normalmente questo andrebbe bene ma sto provando a usare questa direttiva all'interno di una tabella, quindi aggiungere un tag div avvita le cose.
Ho anche provato a non specificare transclude
o template
che elimina il tag div extra ma ora non è possibile trovare {{somethingElseFromController}}
poiché il contenuto "transcluded" è in un ambito isolato. So che potrei ottenere i parametri per la mia direttiva dall'oggetto attrs nella funzione di collegamento invece di creare un ambito isolato, ma preferirei evitare di dover valutare le stringhe con scope. $ Apply().
Qualcuno sa come realizzare questo? Grazie!
Qual è il contenuto "transclusa" che 'somethingElseFromController' è destinato a fornire? –
Potrebbe essere qualsiasi cosa. per esempio. una stringa dal controller. Ho solo bisogno che il mio contenuto escluso sia nello stesso ambito del controller. – rob
angular necessita di un elemento per "appendere" l'ambito. Tuttavia, se stai solo cercando di aggiungere un comportamento, allora come hai detto, non hai bisogno di un modello. Sì, altrimenti usa l'ambito genitore. –