Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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 如何知道ui路由器中的下一个状态_Angularjs_Angular Ui Router - Fatal编程技术网

Angularjs 如何知道ui路由器中的下一个状态

Angularjs 如何知道ui路由器中的下一个状态,angularjs,angular-ui-router,Angularjs,Angular Ui Router,当用户进入特定状态(/login)时,我会显示和隐藏模式,但如果用户从/login进入/register,我会将模式保留在后台 如果用户在/login中,然后转到/register,我将使用登录模式保持打开状态,而如果用户在/login中,然后转到其他页面,我将使用登录模式消失 实际上,我是这样设置角度ui路由器的: app.config(function ($stateProvider, $urlRouterProvider, $locationProvider) { $stateProv

当用户进入特定状态(
/login
)时,我会显示和隐藏模式,但如果用户从
/login
进入
/register
,我会将模式保留在后台

如果用户在
/login
中,然后转到
/register
,我将使用登录模式保持打开状态,而如果用户在
/login
中,然后转到其他页面,我将使用登录模式消失

实际上,我是这样设置角度ui路由器的:

app.config(function ($stateProvider, $urlRouterProvider, $locationProvider) {
  $stateProvider
    .state('home', {
      url: "/",
      templateUrl: "templates/home.html",
      controller: 'HomeCtrl'
    })
    .state('login', {
      url: "/login",
      onEnter: function ($stateParams, $state, Modal) {
        // * modalCtrl for Login
        if (window.loginModal) {
          window.loginModal.remove();
          delete window.loginModal;
          Modal.fromTemplateUrl('templates/user/login.html', function (modal) {
            window.loginModal = modal;
            loginModal.show();
          });
        } else {
          Modal.fromTemplateUrl('templates/user/login.html', function (modal) {
            window.loginModal = modal;
            loginModal.show();
          });
        }
      },
      onExit: function ($stateParams, $state) {
        if ( window.loginModal && /* condition like "!nextState.is('register')" */ ) {
          window.loginModal.hide();
        }
      }
    })
    .state('register', {
      url: "/register",
      onEnter: function ($stateParams, $state, Modal, SlideBoxDelegate) {
        // * modalCtrl for Register
        if (window.registerModal) {
          window.registerModal.remove();
          delete window.registerModal;
          Modal.fromTemplateUrl('templates/user/register.html', function (modal) {
            window.registerModal = modal;
            SlideBoxDelegate.update();
            registerModal.show();
          });
        } else {
          Modal.fromTemplateUrl('templates/user/register.html', function (modal) {
            window.registerModal = modal;
            SlideBoxDelegate.update();
            registerModal.show();
          });
        }
      },
      onExit: function ($stateParams, $state) {
        if ( window.registerModal ) {
          window.registerModal.hide();
        }
      }
    })
    .state('not_found', {
      url: "/not_found",
      templateUrl: 'templates/not_found.html',
      controller: 'NotFoundCtrl'
    })
  $urlRouterProvider.otherwise("/not_found");
  $locationProvider.html5Mode(true);
})
是否有办法设置
条件,如“!nextState.Is('register')”


感谢阅读:)

您可以收听
$stateChangeStart
并在
onExit
函数可以访问的某个位置,即可注入的值或服务,记录
参数的值


将来,将有一个代表转换本身的可注入服务,您可以对其进行检查和操作。

到目前为止,我发现的最好的技巧是在$state服务内的
onExit
函数中使用承诺:

onExit: function ($state) {
  $state.transition.then(toState => {
    if (toState.name === 'nameOfTheWantedNextState') {
      $state.go($state.current, {}, {reload: true});
    }
  })
}

这避免了侦听事件和将名称存储在某处,它只使用转换时可用的名称。相当整洁

有关于这项服务的消息吗?如果
onExit
回调必须像
$stateChangeStart
一样声明和toParams,那就太好了。这同样适用于
onEnter