2013-09-24 11 views
27

Ho il codice seguente:Come si crea dinamicamente un ng-include src?

<div ng-repeat="module in modules" id="{{module.Id}}"> 
    <ng-include ng-init="bootstrapModule(module.Id)" src=""></ng-include> 
</div> 

voglio essere in grado di costruire una stringa in src in questo modo:

/modules/{{module.Name}}/{{module.Name}}.tpl.html 

ma continuo a blocchi stradali che colpiscono. Ho cercato di utilizzare una chiamata indietro funzione per costruirlo,

$scope.constructTemplateUrl = function(id) { 
    return '/modules/' + id + '/' + id + '.tpl.html'; 
} 

Ma questo viene chiamato nel corso & sopra & più e non sembra gradire questo. Ho provato anche a costruire in questo modo:

ng-src="/modules/{{module.Id}}/{{module.Id}}.tpl.html" 

Ma che non funziona neanche. Piuttosto che passare ore e ore a bighellonare, mi chiedevo se qualcun altro si fosse imbattuto in qualcosa del genere e avesse qualche idea?

Inoltre, quando afferro i moduli da $ risorse, li sto tornando in modo asincrono con $ q, quindi non riesco a passare attraverso e aggiungerlo nei moduli prima nella controllore come $scope.modules uguale solo una funzione then a quel punto.

Qualche idea?

+0

che errore state ottenendo? –

risposta

56

ngInclude | src direttiva richiede un'espressione angolare, il che significa che probabilmente si dovrebbe scrivere

ng-src="'/modules/' + module.Id + '/tpl.html'"

Da http://docs.angularjs.org/api/ng.directive:ngInclude

ngInclude | stringa src espressione angolare valutare a URL. Se la sorgente è una costante di stringa, assicurati di inserirla tra virgolette, ad es. src = "'myPartialTemplate.html'".

Sarebbe meglio se si costruisce l'URL in un modello invece di Inline HTML

<div ng-repeat="module in modules" id="{{module.Id}}"> 
    <ng-include src="module.url"></ng-include> 
</div> 
+3

Il tuo metodo funziona ora, ma ero sicuro di averlo provato prima, devo aver usato ng-src invece di src. Grazie a @rogerz! –

+0

@rogerz - Funziona anche per me. Nel mio esempio funziona, ma ottengo un errore 404 nella console. Vedi risposta a: http: //stackoverflow.com/a/33299027/828282 Qualche idea? Grazie – Paul

+0

'

' – twmulloy