2013-04-20 26 views
9

Quindi sto seguendo lo this EggHead.io tutorial sui componenti personalizzati e mi sono imbattuto in questo problema. Quando si dichiara una direttiva come:Accesso al testo della direttiva angolare (elemento) all'interno del modello

angular.module('myApp', []) 
    .directive('myDir', function(){ 
     return { 
      restrict: "E", 
      controller: "myController", 
      link: function(scope, element, attrs) { 
       scope.foo = element.text(); 
      }, 
      templateUrl: "myDirTemplate.html" 
     } 
    }); 

e l'essere Template:

<div>The value is: {{foo}}</div> 

e la direttiva viene utilizzato come segue:

<html> 
... 
<myDir>Bar</myDir> 
... 
</html> 

elemento nella funzione collegamento si riferisce allo

<div>The value is: {{foo}}</div> 

nel modello. Se io non specificare il TemplateURL, quindi elemento si riferisce alla

<myDir>Bar</myDir> 

nella vista principale, che è quello che voglio. Speravo che la direttiva avrebbe preso il testo "Bar" e inserirlo nel {{foo}}, dando il risultato finale di:

<div>The value is: Bar</div> 

Ma non so come muoversi angolare selezionando il modello di elemento ogni volta.

Qualche idea?

risposta

22

È necessario utilizzare ngTransclude:

app.directive('myDir', function(){ 
    return { 
    restrict: "E", 
    transclude: true, 
    templateUrl: "myDirTemplate.html", 
    replace: true 
    } 
}); 

e quindi il modello esterno diventa qualcosa di simile a:

<div>The value is: <span ng-transclude></span></div> 

Visualizzare il codice a lavorare qui: http://plnkr.co/edit/EuT5UlgyxgM8d54pTpOr?p=preview

+0

questo ha funzionato! Grazie! –

+0

Grazie !!! Funziona! – ZhukV

Problemi correlati