2017-08-29 39 views
0

我想在我的角度應用中設置一些重定向。用ui-router/Angular JS設置重定向

現在我有:

$urlRouterProvider.otherwise('/notfound'); 

所以,如果路徑犯規匹配任何定義的狀態,就會進入「未找到」狀態。

但是,我想修改此行爲,以便當路徑不符合任何定義的狀態時,首先對重定向數組進行角度檢查。如果沒有匹配,它將轉到「未找到」。如果存在匹配,則角度會對匹配的網址進行硬重定向。

在僞代碼:

var redirects = [{'/a_certain_path':'http://www.someaddress.com/'}]; 

if(URL != defined state){ // path doesnt match any state 

    if(URL in redirects araay){ // path matches value in array 

     window.location = redirects[URL]; // redirect to match 

    } else $state.go('base.notfound'); 

} else { 

    $state.go('base.notfound'); 
} 

香港專業教育學院嘗試了一些東西(像我的「找不到」狀態使用解析),但顯然這並不工作,因爲路徑已經是「/ NOTFOUND」的時候我到達那裏。

+0

的可能的複製[我怎麼會對UI路由器到一個外部鏈接?](https://stackoverflow.com/a/30221248/2435473) –

+0

不是重複的,因爲這是包括所需的特定邏輯用於將網址與重定向進行匹配 – yevg

回答

1
var redirects = [{name:'/a_certain_path',url:'http://www.someaddress.com/'}]; 

    $urlRouterProvider.otherwise(function ($injector) { 
      var $state = $injector.get('$state'); 
      if(redirects){ 
        var firstRedirect=redirects[0]; 
        redirects.splice(0,1);//if there is more than one 
               redirects not check invalid 
               again 
        if($state.href(firstRedirect.name)) 
        { 
           $state.go(firstRedirect.name) 
        } 
        else 
        { 
          window.location =firstRedirect.url; 
        } 
      } 
      else{ 
       $state.go('base.notfound'); 

      } 

     });