如何使$ urlRouterProvider.otherwise路由到外部URL

时间:2016-03-03 14:26:07

标签: angularjs angular-ui-router

我的.js文件如下

routerApp.config(function ($stateProvider, $urlRouterProvider) { 
    $urlRouterProvider.otherwise(function ($injector, $location) {
    var $state = $injector.get('$state');
    var path = $location.protocol();
    if (path == 'http') {
       $state.go('external');
    }
    else {
        return '/home';
    }
});

$stateProvider

    // HOME STATES AND NESTED VIEWS ========================================
    .state('home', {
        url: '/home',
        templateUrl: 'routing.html'
    })
    .state('external', {
        onEnter: function ($window) {
         $window.open('http://www.google.com', '_self');
        }
    });

});

上面的代码在path!='http'时工作正常,它会重定向到routing.html。但是当path =='http'时,它应该调用外部状态并重定向到外部URL。这里path =='http'条件不起作用。如何在这里拨打外部网址?在州,我呼吁外部onEnter。我可以在没有OnEnter的情况下完成吗?

2 个答案:

答案 0 :(得分:1)

这对我有用:

$urlRouterProvider.otherwise(function ($injector, $location) {
   var protocol = $location.protocol();
   if (protocol == 'http') {
      window.open('http://www.google.com', '_self');
   }
   else {
       return '/home';
   }
});

答案 1 :(得分:0)

这有点不同,但可能这样的事情会起作用:)

$rootScope.on("$stateChangeStart", function(event, toState){
    if(toState.name == 'external'){
         event.preventDefault();
         window.open('http://www.google.com', '_self');
    }
});