2014-04-07 3 views

Antwort

1

Ich war in der Lage, eine Lösung zu finden, die mit eckigen 1.2.15 arbeitet.

Der Kern davon ist, ein Attribut target zu jeder Verbindung hinzuzufügen und dann den $location Dienst zu verwenden, um den Standort zu ändern.

Basierend auf dem aktuellen Winkelcode werden Anchor-Tags mit einem Zielattribut ignoriert (beachten Sie, dass diese Lösung eventuell beschädigt wird).

Um dies zu tun, dies sicherzustellen Javascript vor Winkel läuft:

// prevent angular from taking over link clicks until we have frontend routing 
$(document.documentElement).on("click","a",function(event) { 
    var elem = $(this), target = elem.attr("target"); 
    if(!target) { 
    elem.attr("target","_self"); 
    setTimeout(function() { 
     elem.removeAttr("target"); 
    }); 
    } 
}); 

Danach wird Ihr Standort Provider konfigurieren html5mode verwenden:

angular.module("App", ["App.controllers"]).config([ 
    "$locationProvider", function($locationProvider) { 
     if (history.pushState) { 
     $locationProvider.html5Mode(true); 
     } 
    } 
    ]); 

in Ihrem Controller Nun, die injizieren Standort-Service und verwenden Sie es normalerweise:

angular.module("App.controllers",[]).controllers("SomeController", ["$scope", "$location", function($scope,$location){ 
    $scope.updateLocation = function() { 
     if (history.pushState) { 
     $location.path("/new/path/here"); 
     } 
    }; 
    }]); 
11

Dies ist, was wir auf diesem Github Kommentar in ein Schräg 1.2.16 App tun basiert: https://github.com/angular/angular.js/issues/3924#issuecomment-48592773

$location.url(myNewUrl); 
$location.replace(); 
$window.history.pushState(null, 'any', $location.absUrl()); 

Dieser Code Teil eines Controllers ist. Ich verwende es, um der URL einen Abfrageparameter hinzuzufügen, ohne die Seite neu laden zu müssen. Es funktioniert in unserem Fall.

2

Verwenden Sie die rewriteLinks Option auf dem $ locationProvider html5Mode Objekt:

pageModule.config(function($locationProvider) {{ 
     $locationProvider.html5Mode({ 
      enabled: true, 
      requireBase: false, 
      rewriteLinks: false 
     }); 
    }); 

Danach sollten Sie richtig in der Lage sein, die $ Lage Service zu nutzen, wie:

this.$location.path("/mynewpath"); 
4

Ich traf vor kurzem eine Variation dieses Problems selbst und keine der Antworten hier arbeitete für mich isoliert. history.pushState wurde definiert, funktionierte jedoch nur, wenn es von der Konsole aus aufgerufen wurde. Ich konnte eine Lösung finden, indem ich einige der Antworten hier zusammenfasste. Hier ist der Code, den ich verwendet habe, um dieses Problem zu lösen:

Ich laufe Angular 1.5.5.

Verwandte Themen