我正在寻找一种渲染404页面的好方法,而不是在angularjs中重定向404页面。我发现的许多解决方案都是关于重定向到另一个页面。如果用户点击浏览器的后退按钮,我将创建另一个重定向到404页面的问题。所以我正在寻找一种能够呈现404页面的解决方案。
感谢您的阅读,我希望这对您们来说是可以理解的。
答案 0 :(得分:13)
otherwise
的用法可能就是你在寻找什么。
angular.module('MyApp', [])
.config(function($routeProvider) {
$routeProvider.
when('/', {templateUrl:'/home.html'}).
// add as many as you want here...
otherwise({templateUrl:'/404.html'}); // Render 404 view
});
更新:仔细阅读OP问题(对不起,很早就在这里),我想我有一个替代解决方案(实际上是两个):
1)隐藏内容的$scope
主用户界面的ng-view
变量
这需要ng-show
在您的视图中resolve
和$emit
在你的参数中,然后对其他控制器进行$routeProvider.otherwise({
controller: 'masterController',
resolve: {
404: function(){
return true;
};
});
angular.module('MyApp', [])
.controller('masterController', function($scope, 404) {
$scope.isOn404 = 404
...
})
// In the view
<div ng-controller="masterController">
<div ng-hide="isOn404">
<!-- Actual content -->
</div>
<div ng-show="isOn404">
<!-- 404 Page -->
</div>
</div>
以告诉“嘿,这家伙打了404,不要' t显示你的观点“
ng-view
现在,这需要您拥有一个主控制器,可以帮助您管理其余的UI。此外,您很可能需要进行一些编码来处理页面的其余部分,而不是仅使用$onRouteChange
(例如,某些显示当前标题,正文等的控制器)。
2)自定义路由系统
我实际上已经针对特定项目执行了此操作:您有一个设置“BackURL”和“FordwardURL”的服务;你存放的每个{{1}}你去哪里以及你来自哪里;如果用户即将点击404,您仍然可以通过我的原始示例进行渲染,但是当用户回击时,通过AngularJS捕获并呈现实际的“返回”页面。在这种情况下,我使用的库可以帮助我在名为Lungo的移动设备上进行路由,以及我工作的公司使用的库,L.A.B(Lungo Angular Bridge)。
答案 1 :(得分:1)
我是AngularJS的新手,所以这可能不是一个理想的解决方案,但它适用于显示404页面或类似用途,例如登录页面:
将所有内容重定向到同一主模板:
*pt
master.html模板是指masterController并且有一个子页面:
$routeProvider
.when('/', {
controller: 'homeController',
templateUrl: 'partial.master.html'
})
.when('/cust/:custid', {
controller: 'custController',
templateUrl: 'partial.master.html'
})
masterController具有条件子页面逻辑:
<div ng-controller="masterController">
<h2><a href="#">{{title}} - Header</a></h2>
<hr>
<div ng-include="subPage"></div>
<hr>
<h3>{{title}} - Footer</h3>
</div>
答案 2 :(得分:0)
您也可以使用ui-router,如前所述:https://stackoverflow.com/a/23290818/2723184。恕我直言,您不仅可以获得一个很棒的库,而且还可以获得更好的解决方案。