一尘不染

使用$ routeProvider重定向到Angular之外的路由

angularjs

我已经用Angular编写了Web应用程序的一部分。为了确保覆盖所有路由,我想在中添加一个redirectTo属性$routeProvider,以便将无效路由返回到不使用Angular的Web应用程序的根目录。

我试过了:

$routeProvider.otherwise({
    redirectTo: '/'
});

但是很明显,这仅在URL的Angular控制部分中进行路由,因此用户将被重定向到URL http://app.com/angular-part-of-web-app#,而不是http://app.com,我希望他们进入该URL 。

我已经解决了这一问题,方法是使用空白部分作为“404”页面,然后使用该$window对象将控制器重定向到所需页面:

routes.js

// Redirect to site list.
$routeProvider.when('/404', {
    templateUrl: '/partials/404.html',
    controller: 'RedirectCtrl'
});

// Redirect to the 404 page.
$routeProvider.otherwise({
    redirectTo: '/404'
});

controllers.js

// Controller to redirect users to root page of site.
.controller('RedirectCtrl', ['$scope', '$window', function ($scope, $window) {

    $window.location.href = '/';
}]);

但是,这引爆了“太hacky,一定是更好的方法”的警钟。在Angular中有更好的方法吗?

编辑:角路由-重定向到外部站点?没有对同一个问题给出答案。我将保持开放状态,而不是将其标记为重复(暂时),因为Angular世界发展得如此之快,以前的答案可能不再如此。


阅读 248

收藏
2020-07-04

共1个答案

一尘不染

上面带有/ 404的解决方案不适用于我。但是,这似乎工作

.otherwise({
    controller : function(){
        window.location.replace('/');
    }, 
    template : "<div></div>"
});

PS。我正在使用Angular 1.2.10

2020-07-04