6

dire che ho trovato un modello che contiene un elemento con una direttiva ng-include:Utilizza ng-include con HTML (o compilato) crudo rispetto a un URL modello?

<div ng-include src="'templates/top-promo-content.html'"></div> 

Sto tentando di razionalizzare tutti i nostri modelli nella nostra app costruito JS (utilizzando browserify e la brfs trasformare), che , concettualmente, sarebbe simile:

<div ng-include src="fs.readFileSync('./templates/top-promo-content.html', 'utf8')"></div> 

che in ultima analisi tradursi in:

<div ng-include src="<ul><li>list item</li></ul>"></div> 

Esiste un modo per, invece di utilizzare un URL modello all'interno di uno ng-include, utilizzare invece HTML grezzo o compilato? In caso contrario, c'è un'altra alternativa in angolare che mi permetterebbe di realizzare questo, sia come una sorta di inclusione o parziale, ma con la possibilità di includere HTML raw/compilato?

risposta

2

I modelli possono essere inclusi in una pagina con il tag script.

<script type="text/ng-template" id="templates/top-promo-content.html"> 
    <ul><li>list item</li></ul> 
</script> 

questo mette il modello nella cache modello e la direttiva ng-include ottiene da lì. Lo stesso vale per ogni direttiva che ottiene i modelli tramite un URL.

+1

Non so che questo risolva il mio problema; Sto tentando di semplificare i template nella build usando le istruzioni require tramite browserify. Mettere il modello direttamente nel modello principale come HTML circondato da tag di script non mi consente di farlo. Spero di ottimizzare l'HTML direttamente nel modello include/segnaposto, rispetto all'uso di un inclusivo o continuando ad aggiungere modelli alla cache dei modelli angular. Aggiungerò un altro esempio alla domanda. –

5

Ho trascorso un paio di giorni su questo e ho trovato un'ottima soluzione utilizzando $templateCache.

javascript

app.run(['$templateCache', function($templateCache) { 
    //Add ng-include templates to template cache 
    $templateCache.put('foo.html', require('./templates/foo.html')); 
    $templateCache.put('bar.html', require('./templates/bar.html')); 
}]); 

html

<ng-include="'foo.html'"></ng-include> 

Ciò includerà i modelli nei tuoi bundle.js.

Inoltre, se si sta eseguendo watchify per rebundle; qualsiasi modifica al modello farà sì che watchify spari un rebundle e kick un live refresh con il nuovo modello.

+0

Cosa hai esattamente in "foo.html"?Se inserisco il codice HTML come "

", Browserify non riesce con il seguente errore: ">> Errore: Riga 1: token imprevisto <". Sembra che si aspettino davvero il codice javascript lì. – neric

+0

Non importa, ho trovato una soluzione e l'ho aggiunta come possibile risposta. Grazie però per il puntatore! – neric

+0

@neric foo.html è straight html. Non usi module.export – Malkus

2

ho adattato Malkus risposta a farlo funzionare nel mio caso:

Javascript:

app.run(['$templateCache', function($templateCache) { 
    //Add ng-include templates to template cache 
    $templateCache.put('foo.html', fs.readFileSync('/templates/foot.html').toString()); 
}]); 

HTML

<ng-include="'foo.html'"></ng-include> 

Funziona alla grande!