Mit $ location auf eine neue Seite in AngularJS umleiten

72

Ich teste mit dem folgenden AngularJS $ -Standort. Ich weiß nicht, was das Problem damit ist. Ich möchte nur überprüfen, ob die Umleitung funktioniert oder nicht:

HTML

<body data-ng-controller="MainCtrl">
   Hello {{name}}!
   <button ng-click='go()'>Go</button>
</body>

AngularJS-Code

var app = angular.module('location', []);
   app.controller('MainCtrl', function($scope,$routeParams, $location) {
   $scope.name = 'World';
   $scope.go = function() {
   $location.absUrl() = 'http://www.google.com';
   }
});
Kiran Kumar
quelle
2
Gibt es einen Tippfehler ==, sollte es sein=
Chandermani
1
Sie können immer verwenden: window.location = ' google.com '
Zack Argyle

Antworten:

144

$ location hilft Ihnen bei externen URLs nicht weiter. Verwenden Sie stattdessen den $ window-Dienst:

$window.location.href = 'http://www.google.com';

Beachten Sie, dass Sie das Fensterobjekt verwenden können, dies ist jedoch eine schlechte Vorgehensweise, da $ window leicht verspottbar ist, während window dies nicht ist .

Fernando Neira
quelle
2
nette Geste mit $ window statt window. Dies sollte die akzeptierte Antwort sein.
Nuriel
$ window ist ein zusätzliches Modul, das hinzugefügt werden muss, um die $ window-Funktion zu verwenden?
Gavindra Kalikapersaud
1
@ GK123512648 keine Notwendigkeit, es befindet sich im Kern ns Modul, wie in der offiziellen API-Referenz erwähnt
Fernando Neira
1
Ich musste $window.location = ...ohne die verwenden .href.
Weltschmerz
10

Wenn Sie die ng-Ansicht ändern möchten, müssen Sie das '#' verwenden.

$window.location.href= "#operation";
wdavilaneto
quelle
1
Wenn ich dies verwendete, erzeugte es den folgenden Fehler (obwohl es funktionierte): JavaScript-Laufzeitfehler: [$ rootScope: infdig] 10 $ Digest () -Iterationen erreicht. Abbruch!
Steveareeno
oder Sie können einfach $ location.path ('/ Whatever / the / path / is') aufrufen
Willa
6

Die Linie

$location.absUrl() == 'http://www.google.com';

ist falsch. Zuerst macht == einen Vergleich, und was Sie wahrscheinlich versuchen, ist eine Aufgabe, die mit simple = und nicht double == ist.

Und weil nur absUrl () getter. Sie können url () verwenden, das als Setter oder als Getter verwendet werden kann, wenn Sie möchten.

Referenz: http://docs.angularjs.org/api/ng . $ location

bdavidxyz
quelle
Ich habe '=' nicht benutzt. Auch in den Dokumentationsbeispielen haben sie '==' angegeben
Kiran Kumar
Wird nicht funktionieren !!! absURL ist BEREIT. $ location service bietet Getter-Methoden für schreibgeschützte Teile der URL (absUrl, Protokoll, Host, Port) und Getter / Setter-Methoden für URL, Pfad, Suche, Hash
David Lin
6

Es könnte dir helfen!

AngularJs Codebeispiel

var app = angular.module('urlApp', []);
app.controller('urlCtrl', function ($scope, $log, $window) {
    $scope.ClickMeToRedirect = function () {
        var url = "http://" + $window.location.host + "/Account/Login";
        $log.log(url);
        $window.location.href = url;
    };
});

HTML-Codebeispiel

<div ng-app="urlApp">
    <div ng-controller="urlCtrl">
        Redirect to <a href="#" ng-click="ClickMeToRedirect()">Click Me!</a>
    </div>
</div>
Anil Singh
quelle
0

Dies funktionierte für mich innerhalb einer Direktive und ohne Aktualisierung der Basis-URL (fügt nur den Endpunkt hinzu). Gut für Single Page Apps mit Routing-Mechanismus.

  $(location).attr('href''http://localhost:10005/#/endpoint') 
Nilakantha Singh Deo
quelle
-1

Versuchen Sie, die URL in die Funktion einzugeben

$location.url('http://www.google.com')
shernshiou
quelle
3
Dies funktioniert nicht (zumindest in Angular 1.2.8), sondern wird einfach http://www.google.coman die URL angehängt . $window.location.hrefscheint aber zu funktionieren.
Mendhak