我是AngularJS和ui-router的初学者,我正试图在未找到的资源上处理404.我想在不更改地址栏中的URL的情况下显示错误.
我已经配置了我的状态:
app.config([
"$stateProvider", function($stateProvider) {
$stateProvider
.state("home", {
url: "/",
templateUrl: "app/views/home/home.html"
})
.state("listings", {
abstract: true,
url: "/listings",
templateUrl: "app/views/listings/listings.html"
})
.state("listings.list", {
url: "",
templateUrl: "app/views/listings/listings.list.html",
})
.state("listings.details", {
url: "/{id:.{36}}",
templateUrl: "app/views/listings/listings.details.html",
resolve: {
listing: [
"$stateParams", "listingRepository",
function($stateParams, repository) {
return repository.get({ id: $stateParams.id }).$promise;
}
]
}
})
.state("listings.notFound", {
url: "/404",
template: "Listing not found"
});
}
]);
Run Code Online (Sandbox Code Playgroud)
(我实际上是在使用TypeScript,但我试图将上面的内容改为纯JavaScript)
例如,如果我导航到以下url:
http://localhost:12345/listings/bef8a5dc-0f9e-4541-8446-4ebb10882045
那应该打开listing.details状态.但是,如果该资源不存在,则从resolve函数返回的promise将失败,并在404中捕获:
app.run([
"$rootScope", "$state",
function($rootScope, $state) {
$rootScope.$on("$stateChangeError", function(event, toState, toParams, fromState, …Run Code Online (Sandbox Code Playgroud)