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"
})