实现angular-ui-router'否则'状态

时间:2017-02-14 01:54:54

标签: angular-ui-router

如果用户输入 myURL / myURL /#/ 甚至 myURL /#/ foo ,他们会进入我的索引页面。

但是如果他们输入 myURL / foo ,他们会得到404.这太可怕了。应将它们重定向到 /

我正在努力实现这一点,并没有太多运气。

(function() {
    'use strict';

    angular
        .module('myApp')
        .config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {


            $stateProvider
                .state('index', {
                    name: 'index',
                    url: '/',
                    templateUrl: 'js/views/page1.html',
                    controllerAs: 'page1Controller',
                    data: { pageTitle: 'Main' }
                })
                .state('page2', {
                    name:'page2',
                    url: '/page2/:id',
                    templateUrl: 'js/views/page2.html',
                    controllerAs: 'page2Controller',
                    data: { pageTitle: 'page2' }
                })
            $urlRouterProvider.otherwise('/');
        }]);
})();

我看过几十篇文章,似乎无处可寻找这个简单的案例。

1 个答案:

答案 0 :(得分:0)

official docs上提到您可以将$injector$location传递给该功能。

他们的例子如下:

app.config(function($urlRouterProvider){
    // if the path doesn't match any of the urls you configured
    // otherwise will take care of routing the user to the specified url
    $urlRouterProvider.otherwise('/index');

    // Example of using function rule as param
    $urlRouterProvider.otherwise(function($injector, $location){
        ... some advanced code...
    });
})

为实现目标,您可以做的是创建一个状态,无论何时它不匹配并输入其他信息,都将其发送到该状态。

 $urlRouterProvider.otherwise(function($injector, $location){
    $injector.get('$state').go('404');
});

我没有测试过这个,但是应该可行。