2013-05-08 36 views
4

我有一個ng-app和一個ng-view。該應用程序有多個控制器。angularjs從外部角度重定向

從外部角度,遺留JS代碼,我想重定向某個控制器。

var e = document.getElementById('mApp'); 
var scope = angular.element(e).scope(); 

scope.$apply(function() { scope.$location.path("/account/login"); }); 

我已經嘗試了$ scope。$ location,它告訴我$ location是未定義的,所以我必須做錯事。

+0

是嵌套鑑於此控制器一部分,或者它有它自己的網址是什麼? – 2013-05-08 21:05:40

+0

我仍然在學習角度,所以我很抱歉,如果我沒有正確回答你的問題。只有一個ng-view,它沒有嵌套控制器。 – 2013-05-08 21:15:27

+0

沒有概率 - 基本上我問的是這個控制器的URL位置是什麼?因爲你可以做一個正常的重定向與window.location.hash – 2013-05-08 21:34:23

回答

14

$location是一個Angular服務,它不是$ scope的屬性(除非將其添加到其他地方)。要獲得$location外您的應用程序,你可以使用$injector服務 - 這樣的:

var e = document.getElementById('mApp'); 
var $injector = angular.element(e).injector(); 

var $location = $injector.get('$location'); 
$location.path("/account/login"); 
+0

謝謝先生! – 2013-05-08 22:34:11

+0

我知道這是一個老問題,但我發現克服這個問題的最優雅方式是在應用程序的.run函數中爲角對象添加一個函數。我只需要注入$ location,並設置 angular.myRedirect = function(path){location0.path(path); } 這使我可以調用angular.myRedirect('/ home/stuff');從任何角度被加載而無需IE適合的地方。將東西添加到全局範圍是不好的,但是這可以防止在以後需要更改的地方遍佈多行代碼。 – Peter 2014-08-25 17:25:02

4

以下是我解決了這個。這會讓你從角度外部角度重定向。

$('html').injector().get('$location').path("/where/you/want/to/go"); 
$('html').scope().$apply(); 

$('html')應該是你的根角元素(其中NG-應用程序設置)