2013-02-27 7 views
7

Domanda veloce su AngularJS ng-include dove i parziali hanno HTML5 struttura del nodo cioè: intestazione, nav, footer ...IE8 problema: AngularJS ng-includono - parziali con HTML5 struttura del nodo

Nel mio colpo di testa, ho tutte le cose meravigliose per far funzionare Angular in Internet Explorer 8 e versioni successive.

Tutte le ng-view e ng-include funzionano come previsto.

<!--[if lt IE 9]> 
    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> 
<![endif]--> 

<!-- Internet Explorer AngularJS element creation --> 
<!--[if lte IE 8]> 
    <script> 
     document.createElement('ng-include'); 
     document.createElement('ng-pluralize'); 
     document.createElement('ng-view'); 
     document.createElement('ng:include'); 
     document.createElement('ng:pluralize'); 
     document.createElement('ng:view'); 
    </script> 
    <script src="http://cdnjs.cloudfare.com/ajax/libs/json3/3.2.4/json3.min.js"></script> 
<![endif]--> 

Il problema è quando il parziale ha un nodo HTML5 in esso.

Assunzione: parziale è definita intestazione in partial.

<ng-include src="'partials/header.partial.html'"></ng-include> 

Esempio 1 (fonte header.partial.html - non viene visualizzato in IE8)

<header> 
    <h1>logo</h1> 
</header> 

Esempio 2 (fonte header.partial.html - visualizzazione in IE8)

<div> 
    <h1>logo</h1> 
</div> 

Ho incluso lo script require da angular così come lo shim html5.

Se si sposta il contenuto del partial nel file di root, tutto è buono.

Pensieri?

risposta

4

Questo sembra essere correlato ad emettere #1381. In poche parole, il metodo clone in jqlite mette uno spazio dei nomi vuoto sui tag che non capisce quindi i tag html5 vengono visualizzati come questo <:header> anziché <header>. Questo può essere risolto se si utilizza la versione completa di jQuery. In alternativa è possibile applicare una patch angolare (vedere il problema sopra). Sembra che il problema sia in qualche modo morto su GitHub e qui basato sull'età di questo post. C'è anche un problema correlato su gruppi di google (Problems with jQuery and ng:include in Internet Explorer).

+2

Questo è un bug confermato in angular 1.2. Leggi questo numero https://github.com/angular/angular.js/issues/4020 Breve spiegazione: se includi jQuery prima che i tag angularjs html5 funzionino, le direttive angularjs e le direttive personalizzate non funzioneranno come tag. La soluzione corrente consiste nell'utilizzare le direttive come attributi su tag html validi. – jenso

0

Era coperto, ora che AngularJS sembra aver abbandonato il supporto IE8 a partire da 1.3 hanno anche rimosso parti della loro documentazione. Peccato =/

+1

Nota che puoi ancora vedere le versioni precedenti della documentazione - c'è un selettore di versione nell'angolo in alto a sinistra delle pagine del documento, link diretto: https://code.angularjs.org/1.2.28/docs/guide/ vale a dire – smithml