2016-10-06 2 views
0

Ich habe einen Controller, der den $location Dienst in eckigen verwendet, aber wir müssen es nur im HTML5-Modus verwenden, wenn der Browser history.pushstate nicht unterstützt, möchten wir den Dienst vom Controller weglassen also schreibt es die URL zu /#/2016-17 nicht um und führt stattdessen kein Routing durch. Wenn Sie jedoch $location in einen Controller injizieren, routet es automatisch mit der Hashbang-Methode.Inject Services zu Controller in bestimmten Browsern

-Code unten als Referenz:

function SearchAdvancedController($location) { 
    $location.url("/", false); 
} 

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

Irgendwelche Ideen?

Danke Jungs.

+0

Eckig ist hauptsächlich für SPA gemacht. Sie möchten Ihre App jedes Mal neu laden, wenn der Browser 'history.pushstate' nicht unterstützt? –

+0

@SteevePitis Ich will nicht, dass es etwas unternimmt, $ location ist kein kritisches Feature, es wird nur benutzt, um die URL zu ändern, wenn ein Benutzer sucht, was keine Schlüsselfunktion in älteren Browsern ist. –

Antwort

0

Sie sollten den Dienst immer in Ihren Controller einspeisen, es sei denn, Sie möchten eine Menge von if..else Bedingungen, die überprüfen, ob der Dienst existiert oder nicht. Die einfache Sache zu tun ist, Ihre eigene Dienstleistung zu definieren URLs zu ändern, und bedingt haben sie nichts tun:

module.service('MyLocation', function ($location) { 
    this.url = function() { 
     if (/* browser supports pushstate */) { 
      $location.url.apply($location, arguments); 
     } 
    }; 
}); 

function SearchAdvancedController(MyLocation) { 
    MyLocation.url('/', false); 
} 

Sie können auch zu diesem Zweck mit decorators spielen, um möchten.

+0

Wird dies zutreffen? auf Seite laden auch? –

+0

Bedeutung was genau? – deceze

+0

Wird $ location immer noch injiziert? –

Verwandte Themen