Javascript AngularJS-$stateProvider当用户输入错误的URL时

Javascript AngularJS-$stateProvider当用户输入错误的URL时,javascript,angularjs,url-routing,Javascript,Angularjs,Url Routing,我是安格拉斯的新学生。 我在项目中使用状态提供程序,我不想更改此设置。因为代码已经完成了 这是我的密码: function config($stateProvider, $urlRouterProvider) { $urlRouterProvider .when('/SecondMain', '/SecondMain/OtherPageOne') .when('/Main', '/Main/PageOne') .otherwise("/notfound") $stateProvi

我是安格拉斯的新学生。 我在项目中使用状态提供程序,我不想更改此设置。因为代码已经完成了

这是我的密码:

function config($stateProvider, $urlRouterProvider) {



$urlRouterProvider 
 .when('/SecondMain', '/SecondMain/OtherPageOne')
 .when('/Main', '/Main/PageOne')
 .otherwise("/notfound")

$stateProvider
    .state('Main', {
        abstract: true,
        url: "/Main",
        templateUrl: "/templates/Common/Main.html"
    })
    .state('SecondMain', {
        abstract: true,
        url: "/SecondMain",
        templateUrl: "/templates/Common/SecondMain.html"
    })
    .state('notfound', {
        url: "/NotFound",
        templateUrl: "/templates/Common/NotFound.html"
    })
    .state('Main.PageOne', {
        url: "/Main/PageOne",
        templateUrl: "/templates/Main/PageOne.html"
    })
    .state('Main.PageTwo', {
        url: "/Main/PageTwo",
        templateUrl: "/templates/Main/PageTwo.html"
    })
    .state('SecondMain.OtherPageOne', {
        url: "/SecondMain/PageOne",
        templateUrl: "/templates/SecondMain/OtherPageOne.html"
    })
    .state('SecondMain.OtherPageTwo', {
        url: "/SecondMain/PageTwo",
        templateUrl: "/templates/SecondMain/OtherPageTwo.html"
    })
angular
    .module('inspinia')
    .config(config)
    .run(function ($rootScope, $state) {
        $rootScope.$state = $state;
    });
}
我想要这样的逻辑:如果用户输入:

/主页/第三页

此页面不存在,但用户的起始URL为

/主要

所以他需要转到->/Main/PageOne

如果用户输入:

/文学硕士/第一页

/Ma不存在,用户启动URL完全错误,因此他转到->/Notfound基本上如果用户放置/Main/error\u链接,他转到/Main/PageOne。如果他没有以/Main开头,他就去NotFound

有人能帮我吗


非常感谢

您缺少此配置

$urlRouterProvider.otherwise('/NotFound');

如果没有找到匹配的路由,只需添加这一行,它就会将您重定向到/NotFound url

这个答案的灵感来源。

首先,您必须将
Main
状态设置为非抽象状态,以便可以访问它。然后,您可以编写与要重定向到的位置相关的配置(例如,我在state中使用了
redirectTo
):

因此,每当URL更改为
/Main
,此状态都将被激活。第二种配置是为
$stateChangeStart
事件创建侦听器,如下所示:

angular
  .module('inspinia')
  .config(config)
  .run(function ($rootScope, $state) {
    $rootScope.$on('$stateChangeStart', function(evt, to, params) {
      if (to.redirectTo) {
        evt.preventDefault();
        $state.go(to.redirectTo, params, { location: 'replace' })
      }
    });
  });
现在,如果点击像
/Ma/*
这样的URL,它会自动重定向到
/NotFound
。如果点击像
/Main
这样的URL,它将重定向到
/Main/PageOne


您可以继续讨论任何类型的故障排除。

清楚地阅读下面的说明

你为什么用这条线

when('/Main', '/Main/PageOne')
对于重定向问题,请查看以下状态

.state('Main', {
    abstract: true,
    url: "/Main",
    templateUrl: "/templates/Common/Main.html"
})
抽象:true==>这表示此特定状态是一个抽象,没有它的子级就无法激活

来源:ui路由器js代码。请参阅下面的代码片段

由于此main状态为抽象状态,因此将重定向到其他状态


希望这

在哪里?$urlRouterProvider。当('/Main','/Main/PageOne')。否则(“/notfound”)我已经有了其他的。如果有,请用帖子更新。给你。已更新!=)$urlRouterProvider.when('/Main','/Main/PageOne')。否则(“/notfound”),我已经有了其他方法。但是我想要一个像我说的逻辑:如果用户put:/Main/PageThree<这个页面不存在,但是用户用/Main启动URL,因此他需要转到->/Main/PageOne/Ma/PageOne/Notfound基本上如果用户put/Main/error\u链接,他转到/Main/PageOne。如果他没有以/Main开头,他就去NotFound。谢谢你的邀请!实际上我需要一份状态摘要。因为我有两个抽象状态。对于这个问题,我只提出了一种抽象状态。我以前已经问过类似的问题了。我想其他用户更了解我的问题。请看一看:嗨!我有,因为我有两个抽象状态。我会更新我的问题。我这样做是因为我觉得更容易理解。更新。你能在fb和我联系吗?现在看看,如果你能帮助我,请=)请不要添加你的问题,继续。如果你想告诉我,我会在团队视图中用你的完整代码清楚地解释。真的吗?我非常喜欢!你的facebook是什么?明天我可以带你去看!
.state('Main', {
    abstract: true,
    url: "/Main",
    templateUrl: "/templates/Common/Main.html"
})