如何将路由的业务逻辑包装到其他路由?

时间:2014-10-17 14:26:46

标签: angularjs angular-ui-router

我有一个ui-router路由front

我的意图是当应用转到front时,前端会使用一些业务逻辑重定向到另一条路线:front.registerfront.loginfront.loginFirstTime等。

这是我第一次访问路线时(前面 - > front.register),但不是第二次。

front - (自动)> front.register - (点击) - > front.info - (点击) - > front - ! - > front.register

因此每次go()都不会重新加载控制器。好的,但我该怎么做?

路由如何将业务逻辑包装转发到其他路由?

angular.module('wmw').controller('Front', ['$scope', 'Global', 'User', '$state',
  function($scope, Global, User, $state) {
    $scope.Global = Global;
    $scope.User = User;

    console.log('only run on first visit');

    User.loadData()
    .then(function(routerState) {
      $state.go('front.'+routerState);
    });
  }]
);

User.loadData()返回一个promise。 .then()在加载数据时运行。 routerState是下一个值得参观的地方。不幸的是,这段代码只运行一次。

1 个答案:

答案 0 :(得分:1)

front状态的控制器中,您可以观看当前状态,因为您正在监视front的子状态,您可以使用前置状态控制器中的简单监视来执行此操作:

angular.module('wmw').controller('Front', ['$scope', 'Global', 'User', '$state',
  function($scope, Global, User, $state) {
    $scope.Global = Global;
    $scope.User = User;

    // Save the router state.  Watch the current route
    $scope.state = $state;
    $scope.$watch('state.current.name', function (v) {
      // This runs on every view change
      if ($state.current.name === 'front') {
        User.loadData()
        .then(function(routerState) {
          $state.go('front.'+routerState);
        });
      }
    });
  }]
);

您可能希望有一个简单的if来检查目标状态是否不是阻止重定向循环的当前状态。