我使用angular-ui-router的解决方案从服务器获取数据,在移动到一个状态。有时对服务器的请求失败,我需要通知用户有关失败。如果我从控制器调用服务器,我可以放置然后调用我的通知服务,以防止调用失败。我把调用的服务器解决,因为我想要后代状态等待服务器的结果,他们开始之前。

在调用服务器失败的情况下,在哪里可以捕获错误? (我已经阅读documentation,但仍然不确定如何。此外,我正在寻找一个理由,尝试这个新的代码片段工具:)。

"use strict";

angular.module('MyApp',["ui.router"]).config([
  "$stateProvider","$urlRouterProvider",function ($stateProvider,$urlRouterProvider) {
    $urlRouterProvider.otherwise("/item");
    $stateProvider
    .state("list",{
      url: "/item",template: '<div>{{listvm}}</div>' +
      	'<a ui-sref="list.detail({id:8})">go to child state and trigger resolve</a>' +
        '<ui-view />',controller: ["$scope","$state",function($scope,$state){
          $scope.listvm = { state: $state.current.name };
      }]
    })
    .state("list.detail",{
      url: "/{id}",template: '<div>{{detailvm}}</div>',resolve: {
        data: ["$q","$timeout",function ($q,$timeout) {
          var deferred = $q.defer();
          $timeout(function () {
            //deferred.resolve("successful");
            deferred.reject("fail");   // resolve fails here
          },2000);
          return deferred.promise;
        }]
      },"data",function ($scope,data,$state) {
        $scope.detailvm = {
          state: $state.current.name,data: data
        };
      }]
    });
  }
]);
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.10/angular-ui-router.min.js"></script>

<div ng-app="MyApp">
  <ui-view />
</div>
问题是如果路由解析中的任何依赖性被拒绝,则不会实例化控制器。因此,您可以将故障转换为可在实例化控制器中检测到的数据。

示例伪代码: –

data: ["$q","$http",$timeout,$http) {
      return $timeout(function () { //timeout already returns a promise
        //return "Yes";
        //return success of failure
         return success ? {status:true,data:data} : {status:false}; //return a status from here
       },2000);
     }]

和在你的控制器: –

controller: ["$scope",$state) {
      //If it has Failed
      if(!data.status){
        $scope.error = "Some error";
       return;
      }
        $scope.detailvm = {
          state: $state.current.name,data: data
        };

如果你正在进行$ http呼叫或类似的,你可以使用http promise来解决数据,即使在失败的情况下,并返回一个状态到控制器。

例:-

resolve: {
        data: ["$q",$http) {
           return $http.get("someurl")
             .then(function(){ return {status:true,data: "Yes"} },function(){ return {status:false} }); //In case of failure catch it and return a valid data inorder for the controller to get instantated
        }]
      },
"use strict";

angular.module('MyApp',template: '<div>{{error}}</div><div>{{listvm}}</div>' +
      	'<a ui-sref="list.detail({id:8})">go to child state and trigger resolve</a>' +
        '<ui-view />',$state){
       $scope.listvm = { state: $state.current.name };
      }]
    })
    .state("list.detail",$http) {
           return $http.get("/").then(function(){ return {status:true,function(){ return {status:false} })
        }]
      },$state) {
   
    
        $scope.detailvm = {
          state: $state.current.name,data: data.status ? data :"OOPS Error"
        };
        
      }]
    });
  }
]);
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
    <script data-require="angular-ui-router@*" data-semver="0.2.10" src="//cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.10/angular-ui-router.js"></script>
  <div ng-app="MyApp">
      <ui-view></ui-view>
    </div>

angularjs – 如何处理在angular-ui-router的解决错误的更多相关文章

  1. 所有具有相同前缀的url都应该加载角混合路由器中的特定组件

    在混合角度应用程序中,如果URL前缀以/测试开头,我想加载一个组件。比方说,如果以下url中的任何一个被命中,我希望每次都加载ExampleComponent。c=test/测试/a/b/测试/2222/测试/....我对此进行了一些研究但不幸的是,没有找到任何可行的解决方案。有人能告诉我混合路由器是否可行吗?

  2. angularjs – angular-ui-router嵌套视图和“RangeError:超出最大调用堆栈大小”

    我正在使用最新版本的IonicFramework,它使用了引擎盖下的angular-ui-router0.2.8.这是我第一次使用ui-router所以我可能犯了一个愚蠢的错误,但我无法弄清楚它是什么.当我导航到我刚添加的新状态/视图集时,出现“超出最大调用堆栈大小”错误,Chrome选项卡崩溃.我的基本HTML非常简单:这是相关屏幕的路由配置:只需使用上述路由配置启动应用程序就会导致错误,无需其他交互.以下是我的看法……

  3. angular-ui-router – 如何使用ui路由器在html中使用锚点

    确保你有一个比0.2.14更新的ui-router版本,这是第一个支持ui-router中的html锚点的版本.所有版本都可以找到ongithub,我第一次注意到itwassupported.鉴于您的路由设置:在任何视图上创建链接:在页面视图/home/home.html

  4. angularjs – ui-router v1.0.0alpha0 – TypeError:无法读取未定义的属性’creationContext’

    我开始用AngularJSv1.4.0测试新的ui-routerv1.0.0alpha0,但是我收到了这个错误:这是我的app.config:有没有人知道可能导致这个问题的原因,或者我如何继续找到更多关于我在路由器的0.2版本中没有得到的问题?

  5. angular-ui-router – 当路由参数无效时,以角度2路由到404页面

    假设我有一个像这样的param路径(在Angular2中):/user1/products/:id,它可以有子路由,如/user1/products/3/reviews.当我导航到/user1/products/-1时,我检查我的服务器,如果产品不存在,我想渲染404页面而不影响浏览器历史记录.使用router.navigate([‘/404’])或router.navigateByUrl(‘/4

  6. angular-ui-router – 在StateChangeStart中不可用的Angular UI Router state.go参数

    我正在使用AngularUI路由器,我需要使用state.go方法发送参数.像这样:我还需要在事件stateChangeStart中检查该参数.像这样:编辑:这是我的statedeFinition:ui-router将传递为状态层次结构定义的参数–我们正在导航到.请检查:URLParameters(引用:)通常,URL具有动态部分,称为参数.有几个选项可用于指定参数.基本参数如下所示:因此,如果您

  7. angularjs – 如何在angular-ui-router中的$state.go()中传递自定义数据?

    我想通过UI-Router中的$state.go()传递一个自定义对象到另一个状态.但是我需要在目标状态下运行fun(),所以我不能在URL参数中传递这个对象.在目标控制器中,我试图通过$stateParams获取obj的值,但是获得空对象{}:那么如何将obj传递给状态“用户”呢?使用如下参数定义状态:当这样调用pass参数时:在控制器UserCon接收参数如下:user$state是控制器中定义的参数之一

  8. angularjs – 如何使用angular-translate和angular-ui-router动态切换语言?

    我想这样做的原因是为了搜索引擎优化的目的,因为我已经看到,Google建议在下面的地址中加入一个国家代码。您需要创建常见的抽象ui路由器状态并在其中设置您的语言设置:在你的家庭状态将是从共同的孩子之后:现在您可以设置语言切换状态更改事件:[19.04.2016]我声明Google仍然无法以聪明的方式解析您的网络应用程序。

  9. angularjs – 停止angular-ui-router导航,直到promise被解决

    我宁愿做一个ping到每个状态更改的rails,如果rails会话已过期,我将立即重定向之前的模板呈现。根据angular-ui-router的文档,状态的promise的“resolve”对象的任何成员必须在状态完成加载之前解决。所以我的功能解决方案,是在“$stateChangeStart”的“toState”的resolve对象中添加一个promise:例如:这将确保状态更改保持要解决的承诺,当API调用完成并且基于从API返回的所有决定时,该承诺被完成。toState.resolve){toSta

  10. angularjs – 如何处理在angular-ui-router的解决错误

    我使用angular-ui-router的解决方案从服务器获取数据,在移动到一个状态。有时对服务器的请求失败,我需要通知用户有关失败。在调用服务器失败的情况下,在哪里可以捕获错误?(我已经阅读documentation,但仍然不确定如何。因此,您可以将故障转换为可在实例化控制器中检测到的数据。

随机推荐

  1. Angular2 innerHtml删除样式

    我正在使用innerHtml并在我的cms中设置html,响应似乎没问题,如果我这样打印:{{poi.content}}它给了我正确的内容:``但是当我使用[innerHtml]=“poi.content”时,它会给我这个html:当我使用[innerHtml]时,有谁知道为什么它会剥离我的样式Angular2清理动态添加的HTML,样式,……

  2. 为Angular根组件/模块指定@Input()参数

    我有3个根组件,由根AppModule引导.你如何为其中一个组件指定@input()参数?也不由AppModalComponent获取:它是未定义的.据我所知,你不能将@input()传递给bootstraped组件.但您可以使用其他方法来做到这一点–将值作为属性传递.index.html:app.component.ts:

  3. angular-ui-bootstrap – 如何为angular ui-bootstrap tabs指令指定href参数

    我正在使用角度ui-bootstrap库,但我不知道如何为每个选项卡指定自定义href.在角度ui-bootstrap文档中,指定了一个可选参数select(),但我不知道如何使用它来自定义每个选项卡的链接另一种重新定义问题的方法是如何使用带有角度ui-bootstrap选项卡的路由我希望现在还不算太晚,但我今天遇到了同样的问题.你可以通过以下方式实现:1)在控制器中定义选项卡href:2)声明一个函数来改变控制器中的散列:3)使用以下标记:我不确定这是否是最好的方法,我很乐意听取别人的意见.

  4. 离子框架 – 标签内部的ng-click不起作用

    >为什么标签标签内的按钮不起作用?>但是标签外的按钮(登陆)工作正常,为什么?>请帮我解决这个问题.我需要在点击时做出回复按钮workingdemo解决方案就是不要为物品使用标签.而只是使用divHTML

  5. Angular 2:将值传递给路由数据解析

    我正在尝试编写一个DataResolver服务,允许Angular2路由器在初始化组件之前预加载数据.解析器需要调用不同的API端点来获取适合于正在加载的路由的数据.我正在构建一个通用解析器,而不是为我的许多组件中的每个组件设置一个解析器.因此,我想在路由定义中传递指向正确端点的自定义输入.例如,考虑以下路线:app.routes.ts在第一个实例中,解析器需要调用/path/to/resourc

  6. angularjs – 解释ngModel管道,解析器,格式化程序,viewChangeListeners和$watchers的顺序

    换句话说:如果在模型更新之前触发了“ng-change”,我可以理解,但是我很难理解在更新模型之后以及在完成填充更改之前触发函数绑定属性.如果您读到这里:祝贺并感谢您的耐心等待!

  7. 角度5模板形式检测形式有效性状态的变化

    为了拥有一个可以监听其包含的表单的有效性状态的变化的组件并执行某些组件的方法,是reactiveforms的方法吗?

  8. Angular 2 CSV文件下载

    我在springboot应用程序中有我的后端,从那里我返回一个.csv文件WheniamhittingtheURLinbrowsercsvfileisgettingdownloaded.现在我试图从我的角度2应用程序中点击此URL,代码是这样的:零件:服务:我正在下载文件,但它像ActuallyitshouldbeBook.csv请指导我缺少的东西.有一种解决方法,但您需要创建一个页面上的元

  9. angularjs – Angular UI-Grid:过滤后如何获取总项数

    提前致谢:)你应该避免使用jQuery并与API进行交互.首先需要在网格创建事件中保存对API的引用.您应该已经知道总行数.您可以使用以下命令获取可见/已过滤行数:要么您可以使用以下命令获取所选行的数量:

  10. angularjs – 迁移gulp进程以包含typescript

    或者我应该使用tsc作为我的主要构建工具,让它解决依赖关系,创建映射文件并制作捆绑包?

返回
顶部