2014-12-11 9 views
6

Ich versuche SVG-Symbole mit Angularjs mit html5Mode auf True zu verwenden. Um html5mode URLs zu verwenden, müssen Sie die basePath im Kopf des HTML-Dokuments festlegen.Verwenden von SVG-Symbolen in Firefox mit AngularJS

<base href="/"> 

Ich dann laden alle meine Svg-Symbole in die index.html Seite als Symbole.

<?xml version="1.0" encoding="UTF-8"?> 
<svg xmlns="http://www.w3.org/2000/svg" style="display:none"> 
    <symbol id="user" viewBox="0 0 64 64"> 
     <path d="..."> 
    </symbol> 
</svg> 

ich kann nicht herausfinden, wie diese konsequent in Firefox zur Arbeit zu kommen. In Chrome und IE kann ich immer nur die Svg use href auf die ID des Svg-Symbols setzen.

<svg ng-class="type" class="main-nav-icon"> 
    <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#user"></use> 
</svg> 

Keines der Symbole wird jedoch in Firefox angezeigt. Von einer vorherigen Frage wurde mir gesagt, dass dies wegen des Tags base war. Also habe ich versuchte

<base href="http://localhost:5080/"> 

den base-Tag auf eine absolute URL setzen und versuchte dann jede Kombination von URLs für den use-Tag. Ich habe es schließlich zum Laufen gebracht, wenn ich eine absolute URL verwende, die auf dem ursprünglichen Pfad basiert, von dem die Seite index.html heruntergeladen wurde.

Zum Beispiel, wenn die Seite von http://localhost:5080/user geladen wurde dann den use Tag wie die folgenden Einrichtung wird die Symbole angezeigt werden:

<svg ng-class="type" class="main-nav-icon"> 
    <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://localhost:5080/user#user"></use> 
</svg> 

Diese Ordnung funktioniert, wenn der Benutzer rund um die App klicken. Wenn der Benutzer die Seite jedoch auf http://localhost:5080/photos aktualisiert, werden alle Symbole erneut unterbrochen, da href jetzt falsch ist. Also fing ich an, die ursprüngliche URL zu cachen, von der die Seite index.html geladen wurde. Aber auch dann, wenn einige Seiten aktualisiert werden, werden alle Symbole erneut unterbrochen.

Mit html5mode mit AngularJS, was das Richtige ist den base-Tag zu setzen und was das Richtige ist der use Tag href zu setzen, um die Symbole zeigen, bis in IE, Chrome und Firefox zu machen?

+0

Haben Sie versucht, die Basis href dynamisch über JavaScript in den Standort festlegen. href? –

+0

Das würde das AngularJS Routing brechen, nicht wahr? – Bill

+0

Haben Sie diese Frage/Antwort gesehen: http://StackOverflow.com/Questions/19742805/angular-and-svg-filters –

Antwort

7

Es scheint, wie dieser Fehler, die here und fixierte von Jeff Kreuz (von Google) erwähnt von this

Auto-Richtlinien automatisch URLs absolute Hash neu zu schreiben für Fragmentverweise in SVG-Elementen, um Nebenwirkungen in Gecko zu arbeiten und Blinzeln.

+2

Basierend auf diesem Fehler, hat es das für mich getan: '$ locationProvider.html5Mode ({enabled: true, requireBase: false});'. Ich kann dann das Basis-Tag entfernen und alles funktioniert. – Bill

Verwandte Themen