Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 基于条件的角度布线_Angularjs_Angularjs Routing - Fatal编程技术网

Angularjs 基于条件的角度布线

Angularjs 基于条件的角度布线,angularjs,angularjs-routing,Angularjs,Angularjs Routing,我一直在试图找到一种方法来实现角度路由,该路由基于条件,而不是用户单击的链接 路线1->视图1 路由2->视图2 为了增加复杂性,根据服务结果评估病情本身。我正在为我的购物车结账应用程序检索一组项目。如果项目数>0,我需要购物车路由到view1。如果为0,则为另一条路线 如果(itemListService.getItems().length>0)-->route1 else-->路由2 因此,出现的复杂性是,路由必须等到服务结果得到评估之后,才能加载相应的视图。换句话说,服务承诺必须得到解决

我一直在试图找到一种方法来实现角度路由,该路由基于条件,而不是用户单击的链接

路线1->视图1 路由2->视图2

为了增加复杂性,根据服务结果评估病情本身。我正在为我的购物车结账应用程序检索一组项目。如果项目数>0,我需要购物车路由到view1。如果为0,则为另一条路线

如果(itemListService.getItems().length>0)-->route1

else-->路由2

因此,出现的复杂性是,路由必须等到服务结果得到评估之后,才能加载相应的视图。换句话说,服务承诺必须得到解决

我在下面的帖子中发现,有人建议在routeprovider中使用'resolve'配置属性,但这只解决了等待服务响应的问题。我不确定它是否满足基于服务响应的检查条件

有人能帮我吗?
ui路由器能否比routeProvider更好地实现这一点?

是的,使用ui-router可以轻松实现。例如,创建四种状态:仪表板状态,它将您链接到冲突解决程序状态。根据服务的数据输入冲突解决程序状态后,您可以重定向到相应的状态。这是在冲突解决程序状态的钩子的帮助下完成的

在“砰砰”的一声中

  • 单击仪表板中的父项
  • 它将导航到状态child1,直到服务中的项具有值为止
  • 当所有项目弹出时,它将导航到状态child2
  • 代码:

     var myapp = angular.module('myapp', ["ui.router"]);
     myapp.config(function($stateProvider, $urlRouterProvider) {
      $urlRouterProvider.otherwise("/dashboard")
      $stateProvider
        .state('dashboard', {
          url: '/dashboard',
          templateUrl: 'dashboard.html'
        }).state('parent', {
          url: '/parent',
          resolve: {
            stateToGo: function(service) {
              if (service.getItems().length > 0) {
                return 'child1';
              } else {
                return 'child2';
              }
            }
          },
          onEnter: function(stateToGo, $state) {
            $state.go(stateToGo);
          }
        })
        .state('child1', {
          templateUrl: 'child1.html',
          resolve: {
            service: function(service) {
              return service;
            }
          },
          controller: function($scope, service) {
            console.log(service.getItems());
            service.removeItem();
            console.log(service.getItems());
          }
        }).state('child2', {
          templateUrl: 'child2.html'
        });
    });
    
    myapp.factory('service', [function() {
      var items = [1, 2];
      return {
        getItems: function() {
          return items;
        },
        removeItem: function() {
          items.pop();
        }
      };
    }]);