更改UI视图模板而不更改URL

ant

我有以下状态配置(简化):

$stateProvider
  .state(
    'showitem', 
     { url: '/item/{id}', templateUrl: 'showitem.html', controller: 'MyCtrl' }
  )
  .state(
    'notFound',
    { url: '^*path', templateUrl: '404.html'}
  );

当我输入时/badurl,显示404错误。

当我输入时/item/123,正在查询应用程序的API以查找具有指定标识符的项目。如果找不到项目,它将返回成功的项目数据或404 HTTP标头。为了全局检测此类错误,我编写了一个http拦截器:

$httpProvider.interceptors.push(function($q, $location) {
  return {
    responseError: function(rejection) {
      if(rejection.status == 404)
        $location.path('/404');
      return $q.reject(rejection);
    }
  };
});

代码可以工作,但是当项目的ID错误时,/item/123URL会更改为/404显示错误页面。

问题是-如何在更改URL的情况下将404.html视图加载到我的<div ui-view></div>元素中

有一个类似的问题,但是templateProvider似乎无法解决我的问题。

ant

受此答案和@RadimKohler评论启发的解决方案urlnotFound路线中删除

$stateProvider
.state(
  'showitem', 
  { url: '/item/{id}', templateUrl: 'showitem.html', controller: 'MyCtrl' }
)
.state(
  'notFound',
  { templateUrl: '404.html'}
);

配置oterwise规则:

$urlRouterProvider.otherwise(function($injector, $location) {
  var $state = $injector.get('$state');
  $state.go('notFound');
  return $location.path();
});

最后,转到notFound404 API错误路线:

$httpProvider.interceptors.push(function($q, $injector) {
  return {
    responseError: function(rejection) {
      if(rejection.status == 404)
        $injector.get('$state').go('notFound');
      return $q.reject(rejection);
    }
  };
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更改路线参数而不更新视图

来自分类Dev

重定向而不更改URL

来自分类Dev

如何以编程方式更改UI视图模板URL

来自分类Dev

AngularJS ui-bootstrap打开模式窗口而不更改url

来自分类Dev

路线更改,但视图不包含ui-router

来自分类Dev

Angular.js-更改模板而不更改url

来自分类Dev

UI路由器更改状态而不更改url

来自分类Dev

流星,如何更改事件的模板(视图)?

来自分类Dev

有多个视图,URL更改时,我的子模板未在Angular UI中加载

来自分类Dev

单击链接后,Angularjs更改视图模板

来自分类Dev

Angular不更新范围更改模板

来自分类Dev

从视图模型动态更改模板(Aurelia)

来自分类Dev

angularJS $ scope更改不更新视图

来自分类Dev

在AngularJS ui路由器中,状态已更改,URL已更改,但模板URL未更改

来自分类Dev

Angular UI Router根命名视图模板从子视图更改

来自分类Dev

在反应中,URL被更改,但视图未更改

来自分类Dev

ReactJs Router更改url而不更改页面

来自分类Dev

SwiftUI-不更改视图

来自分类Dev

从局部视图发布更改URL

来自分类Dev

HttpResponseRedirect更改视图,但不呈现模板

来自分类Dev

cakephp更改默认的URL视图

来自分类Dev

Django模板不更改表单操作

来自分类Dev

Angular.js:更改模板的内部视图

来自分类Dev

扩展Ember组件而不更改模板

来自分类Dev

在AngularJS ui路由器中,状态已更改,URL已更改,但模板URL未更改

来自分类Dev

Angular UI Router根命名视图模板从子视图更改

来自分类Dev

加载 url 而不更改 url

来自分类Dev

更改地图视图而不更改位置

来自分类Dev

TeamCity 更改模板参数而不更改子项