渲染404而不是在angularjs中重定向404

时间:2013-09-13 08:54:05

标签: angularjs user-experience

我正在寻找一种渲染404页面的好方法,而不是在angularjs中重定向404页面。我发现的许多解决方案都是关于重定向到另一个页面。如果用户点击浏览器的后退按钮,我将创建另一个重定向到404页面的问题。所以我正在寻找一种能够呈现404页面的解决方案。

感谢您的阅读,我希望这对您们来说是可以理解的。

3 个答案:

答案 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页面或类似用途,例如登录页面:

请参阅Working Example

将所有内容重定向到同一主模板:

*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。恕我直言,您不仅可以获得一个很棒的库,而且还可以获得更好的解决方案。