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

nXq*_*Xqd 15 user-experience angularjs

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

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

jjp*_*aga 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
});
Run Code Online (Sandbox Code Playgroud)

更新:在仔细阅读OP问题后(对不起,很早就在这里),我我有一个替代解决方案(实际上是两个):

1)$scope您的主UI的变量ng-view隐藏内容

这需要ng-show在你的视图和resolve你的参数中,然后$emit对其他控制器做一个告诉"嘿,这家伙打了404,不显示你的视图"

$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>
Run Code Online (Sandbox Code Playgroud)

现在,这需要您拥有一个主控制器,可以帮助您管理UI的其余部分.此外,您很可能需要进行一些编码来处理页面的其余部分而不是仅仅使用ng-view(例如,一些显示当前标题,正文等的控制器).

2)自定义路由系统

我实际上是为一个特定的项目做了这个:你有一个设置"BackURL"和"FordwardURL"的服务; 每个$onRouteChange你存储的地方,你来自哪里; 如果用户即将点击404,您仍然可以通过我的原始示例进行渲染,但是当用户回击时,通过AngularJS捕获并呈现实际的"返回"页面.在这种情况下,我使用的库可以帮助我在名为Lungo的移动设备上进行路由,以及我工作的公司使用的库,LAB(Lungo Angular Bridge).