2013-09-24 10 views
27

Ich habe den folgenden Code:Wie kann ich einen ng-include-Quellcode dynamisch erstellen?

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

Ich möchte eine Zeichenfolge in src bauen können, etwa so:

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

Aber ich schlagen immer wieder Straßensperren. Ich habe versucht, Funktion einen Anruf zu verwenden zurück, um es zu bauen,

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

Aber diese über & über & über aufgerufen werden, und es scheint nicht, dass zu mögen. Ich habe auch versucht, es so zu konstruieren:

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

Aber das funktioniert auch nicht. Anstatt stundenlang um den heißen Brei herumreden zu müssen, habe ich mich gefragt, ob noch jemand auf so etwas gestoßen ist und irgendwelche Ideen hat?

Auch wenn ich die Module von $ Ressource packen, ich bin sie asynchron mit $ q Rückkehr, so scheine ich kann nicht durch zu gehen und in die zuvor in der Controller-Module hinzufügen, um $scope.modules nur eine Funktion then gleich an diesem Punkt.

Irgendwelche Ideen?

+0

welche Fehler erhalten Sie? –

Antwort

56

ngInclude | src Richtlinie erfordert einen Winkel Ausdruck, der bedeutet, dass Sie wahrscheinlich

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

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

ngInclude schreiben sollte | src String Winkel Ausdruck Auswertung zu URL. Wenn die Quelle eine Zeichenfolgenkonstante ist, stellen Sie sicher, dass Sie sie in Anführungszeichen setzen, z. src = "'myPartialTemplate.html'".

Es wäre besser, wenn Sie die URL in Modell HTML anstelle von Inline-Konstrukt

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

Ihre Methode funktioniert jetzt, aber ich war sicher, dass ich es vorher versucht habe, ich muss ng-src anstelle von nur src verwendet haben. Danke @rogerz! –

+0

@rogerz - Das funktioniert auch für mich. In meinem Beispiel funktioniert es, aber ich bekomme einen 404 Fehler in der Konsole. Siehe Antwort auf: http: //stackoverflow.com/a/33299027/828282 Irgendwelche Ideen? Danke – Paul

+0

'

' – twmulloy